CORS 预检请求有哪些安全优势?

2024-01-19

我一直在开发一个经典的 SPA,前端应用程序就位于其中app.example.com当 API 继续存在时api.example.com,因此需要使用 CORS 请求。已设置服务器返回 CORS 标头,工作正常。

每当 AJAX 请求不简单,浏览器会额外生成一个OPTIONS向服务器发出请求以确定它是否可以使用有效负载进行调用。在 MDN 上查找简单请求 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

问题是:执行 OPTIONS 请求的实际好处是什么,特别是在安全方面?

我的应用程序的某些用户具有显着的地理延迟,并且由于预检缓存不会持续很长时间,因此预检请求会导致延迟成倍增加。

我希望能够做出POST请求简单,但只需嵌入Content-Type of application/json否定了这一点。一种可能的解决方案是使用“破解”它text/plain或 url 中的编码。因此,我希望在离开时能够充分了解 CORS 预检请求对 Web 安全的作用。谢谢。


正如您链接到的文章所述:

这些是 Web 内容可以处理的相同类型的跨站点请求 已经发出,并且没有响应数据发布给请求者 除非服务器发送适当的标头。因此,网站 防止跨站请求伪造 HTTP 没什么可怕的 访问控制。

基本上,这样做是为了确保 CORS 不会引入任何额外的方法来发出跨域请求,否则如果没有 CORS,这些请求将被阻止。

例如,如果没有 CORS,以下表单内容类型只能通过实际的跨域完成<form>标签,而不是通过 AJAX 请求:

  • 应用程序/x-www-form-urlencoded
  • 多部分/表单数据
  • 文本/纯文本

因此,任何接收具有上述内容类型之一的请求的服务器都知道它有可能来自另一个域,并且知道采取措施来抵御诸如以下攻击:跨站请求伪造 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)。其他内容类型,例如application/json以前只能从同一域创建,因此不需要额外的保护。

类似地,带有额外标头的请求(例如X-Requested-With https://stackoverflow.com/a/22533680/413180)以前会受到类似的保护,因为它们只能来自同一域(a<form>标签无法添加额外的标头,这是以前执行跨域 POST 的唯一方法)。 GET 和 POST 也是唯一的方法由表格支持 https://www.w3.org/TR/html401/interact/forms.html#h-17.13.1。 HEAD 也列于此处,因为它的执行方式与 GET 相同,但不检索消息正文。

因此,简而言之,它将首先阻止发出“非简单”请求,而不会调用 OPTIONS 来确保客户端和服务器都在使用 CORS 语言。请记住,同源政策 https://en.wikipedia.org/wiki/Same-origin_policy仅防止来自不同来源的读取,因此仍然需要预检机制来防止发生写入 - 即不安全的方法 https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html避免在 CSRF 场景中执行。

您也许可以使用以下方法提高性能Access-Control-Max-Age标头。详情请点击此处 https://stackoverflow.com/q/25673326/413180.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CORS 预检请求有哪些安全优势? 的相关文章

  • 为什么我收到此错误:“未捕获类型错误:无法读取未定义的属性“标题””?

    我正在尝试写一个ajax网络应用程序 我有一个函数应该请求一个json对象 然后使用它来重新 填充网站 这里是JavaScript有问题 第 8 16 行 window onload LoadData Home var doc functi
  • 正确使用 EncryptedSharedPreferences

    Android 最近发布了 EncryptedSharedPreferences 它自动加密 SharedPreferences 键 值数据 虽然这很好 但我发现我可以简单地连接 API 调用并检索解密的值 除了在调用 EncryptedS
  • 如何在ListBox中加载大量数据? ASP.NET MVC 应用程序

    我正在使用 ASP NET MVC 应用程序 要求用户能够从可能包含超过 30 000 个条目的列表框中选择一个项目 是否有一种使用 Ajax 调用来填充此 ListBox 内容的动态方法 效果良好 我是否最好只填充服务器上的 ListBo
  • 此 JavaScript 如何在 Firefox 中打开 Windows 设置?

    新安装 Firefox 45 开发版后 我看到了这个页面 它有一个按钮 让我们开始吧 单击该按钮时 会以某种方式打开选择默认应用程序Windows 10 中的设置页面 这是怎么做到的 我无法通过开发者控制台在该页面上迷宫般的代码中找到任何内
  • 使用鼠标检测的反验证码

    我想知道是否可以为仅使用 javascript 的表单创建一个安全的人体检测机制 不使用验证码 来检测鼠标移动 因为 jquery 或操作系统代码都可以移动鼠标 我是这么告诉的 这是我的计划 使用 jQuery 我可以检测鼠标是否已移动 然
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • 生产环境的 Flask-Login 与 Flask-Security

    我正在构建一个功能 供用户注册 登录 验证和授权自己 特别是使用 Python Flask 作为后端 我找到了一些解决方案 例如flask login and flask security 据我了解 flask login实际上并没有进行任
  • 更改javascript nodejs中所有页面的href url

    我已经实现了具有多种语言下拉菜单的引导导航栏 当我选择语言时 它将翻译页面 如何更改其他页面的 url 和按钮文本 当我选择french 将所有网址更改为 fr about and fr contact 如何使用 JavaScript 进行
  • 返回重定向作为对 Ajax(fetch、XHR 等)请求的响应

    如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果服务器发送重定向 又名 302 响应加上 Location 标头 浏览器将自动遵循重定向 对此的回应second请求 假
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 评估 CRC-32 实现中的差异

    我见过相同基本 CRC 32 算法的许多不同实现 如下所示 int remain int sbox SIZESBOX int dividend int bit for dividend 0 dividend lt SIZESBOX divi
  • 简单的 AJAX 示例 - 从 txt 文件加载数据

    我正在尝试编写一个基本的 AJAX 教程 将文件 hello txt 中的数据读取到我的网页中 hello txt和我当前的html网页位于同一目录中 有谁知道我做错了什么 当我加载页面时什么也没有发生
  • Android - 在sqlite数据库中存储敏感数据

    我需要将敏感数据存储在 Android 应用程序的 sqlite 数据库中 我如何确定这些数据非常安全 我知道我可以使用密钥加密数据 但是我将该密钥存储在哪里 我也不想要求用户填写密钥 我只是希望它能够自行工作 因为我害怕逆向工程 所以我也
  • 我必须使用什么加密程序来通过 HTTP 协议发送加密的“电子邮件”和“密码”值?

    我正在使用 Ruby on Rails 3 我想通过 HTTP 协议发送 电子邮件 和 密码 值 我知道 我不应该 但我需要 我需要从发送用户凭据我的客户申请到一个我的服务应用 我可以使用公共和私人RSA密钥来实现这一点 但如果是这样 我不
  • Firefox 不会在使用 jQuery AJAX 加载的内容上呈现 CSS 样式

    我有一个网站 允许用户对书籍和文章发表评论 主表单有一个搜索输入 用于查找相关书籍或文章 来源 我使用 jQuery 根据输入的搜索词从外部站点动态加载新源 然后还使用 AJAX 返回列表中的源 我有两个问题 现在 在用户输入四个字符后 j
  • Xhr上传event.loaded问题

    opts xhr function var xhr new window XMLHttpRequest Upload progress xhr upload onprogress function e if e lengthComputab
  • 为什么 RFC 6797 禁止通过纯 HTTP 响应发送 Strict-Transport-Security 标头?

    在阅读 HSTS 严格传输安全 规范时 我看到了一条禁令第 7 2 节 https www rfc editor org rfc rfc6797 section 7 2禁止在通过 http 而不是 https 访问时发送标头 HSTS 主机
  • 如何让浏览器后退按钮通过 AJAX 调用带您返回?

    我有一个页面 上面有很多动态生成的复选框 当用户单击这些复选框时 页面上的许多内容会通过 ajax 动态更改 最终用户抱怨 在点击提交然后点击后退按钮更改某些内容后 他们的选择被破坏了 他们必须重新做一遍 我见过一些网站 gmail fac
  • 如何使用 Jest 测试 React 渲染的异步数据?

    我使用 React 进行渲染 使用 Jest Jasmine 进行测试 我用旧的 Jest Jasmine 编写了测试waitsFor and runs但这些现在在 Jasmine 2 中已经消失了 我不知道如何用新的替换done asyn
  • 在 php、ajax 或 javascript 中加载进度?

    任何人都知道如何在系统仍在服务器端获取数据的同时在客户端显示加载进度以及完成的百分比 例如 当我在客户端按下 确定 按钮时 它会调用服务器端从数据库收集数据 整个过程可能需要2到3分钟 如何在客户端显示加载进度 大约加载完成了多少 我怎样才

随机推荐