CORS 实际上如何防范安全问题?
How does CORS actually protect against security issues?
在阅读了 MDN 和 CodeAcademy 的大量文档后,我仍然没有完全理解 CORS 握手实际上可以防止什么。
我了解该机制应防止浏览器在没有进一步控制的情况下请求位于不同来源的资源。
此外,据我了解规范,访问控制决策完全由作为 CORS 请求目标的服务器评估。
例如,如果服务器回复 "Access-Control-Allow-Origin" header 设置(例如“*”),则允许浏览器处理响应。
这里有两个场景提出了我的问题:
- 如果我是一个邪恶的服务器开发者,我会回复
"Access-Control-Allow-Origin" 设置为 * always,这允许
浏览器来处理响应。
- 如果我是一个邪恶的人并且无论如何都想访问资源,我会使用不实现 CORS 机制的(自定义)Web 客户端。
提到这两种情况,我想知道 CORS 真正防止的是什么。我想知道拒绝来自被禁止来源的请求并在响应中发送足够的 HTTP 状态(例如 403 Forbidden)是否更安全。
可能我遗漏了一些东西,但如果有任何正确方向的提示,我将不胜感激。
回应您的观点:
CORS 与防止跨源访问有关。在这种情况下,假设您正在访问 goodserver.com
,他们将为您提供内容,因此他们是行话中的 origin。据推测,他们不会为您提供任何与 evilserver.com
交谈的内容。请注意,因此 CORS 并没有试图阻止跨站点脚本 - 攻击者以某种方式将代码放在您的来源上,确实 与 evilserver.com
交谈。
你的浏览器实现了CORS,所以作为一个恶人,你需要写一个浏览器并说服人们下载并运行它。但是,您是对的,如果您编写本机应用程序或使用 HTML 表单,您将无法从 CORS 安全性中受益。
你的问题确实强调了 CORS 系统依赖信任的地方,这一点值得牢记。
您可能会发现这对他们有帮助,因为他们将完成整个过程:
在阅读了 MDN 和 CodeAcademy 的大量文档后,我仍然没有完全理解 CORS 握手实际上可以防止什么。
我了解该机制应防止浏览器在没有进一步控制的情况下请求位于不同来源的资源。
此外,据我了解规范,访问控制决策完全由作为 CORS 请求目标的服务器评估。 例如,如果服务器回复 "Access-Control-Allow-Origin" header 设置(例如“*”),则允许浏览器处理响应。
这里有两个场景提出了我的问题:
- 如果我是一个邪恶的服务器开发者,我会回复 "Access-Control-Allow-Origin" 设置为 * always,这允许 浏览器来处理响应。
- 如果我是一个邪恶的人并且无论如何都想访问资源,我会使用不实现 CORS 机制的(自定义)Web 客户端。
提到这两种情况,我想知道 CORS 真正防止的是什么。我想知道拒绝来自被禁止来源的请求并在响应中发送足够的 HTTP 状态(例如 403 Forbidden)是否更安全。
可能我遗漏了一些东西,但如果有任何正确方向的提示,我将不胜感激。
回应您的观点:
CORS 与防止跨源访问有关。在这种情况下,假设您正在访问
goodserver.com
,他们将为您提供内容,因此他们是行话中的 origin。据推测,他们不会为您提供任何与evilserver.com
交谈的内容。请注意,因此 CORS 并没有试图阻止跨站点脚本 - 攻击者以某种方式将代码放在您的来源上,确实 与evilserver.com
交谈。你的浏览器实现了CORS,所以作为一个恶人,你需要写一个浏览器并说服人们下载并运行它。但是,您是对的,如果您编写本机应用程序或使用 HTML 表单,您将无法从 CORS 安全性中受益。
你的问题确实强调了 CORS 系统依赖信任的地方,这一点值得牢记。
您可能会发现这对他们有帮助,因为他们将完成整个过程: