为啥禁用浏览器网络安全(例如 Chrome)有助于执行跨站点请求?

Posted

技术标签:

【中文标题】为啥禁用浏览器网络安全(例如 Chrome)有助于执行跨站点请求?【英文标题】:Why will disabling Browser Web Security (e.g. Chrome) help doing Cross-Site-Requests?为什么禁用浏览器网络安全(例如 Chrome)有助于执行跨站点请求? 【发布时间】:2013-02-14 20:20:42 【问题描述】:

我们有几个内部网络应用程序。其中之一需要访问所有其他应用程序。问题是:Same-Orign-Policy

实际上,我确实设法绕过它。首先,IE 在网络安全方面相当草率。所以,它实际上问我是否要完成这些请求。如果我点击是,他只是执行了跨站点请求。

但由于大多数用户不会使用 IE,因此需要使其在另一个浏览器中运行。 所以,我试图让它在谷歌浏览器中运行。经过一番研究,我发现,当我使用执行参数--disable-web-security 打开网络安全时,它会起作用。 这完成了工作。但不幸的是,大多数用户不会使用这个执行参数。因此我需要另一种解决方案。

然后我遇到了 CORS。 CORS 似乎是在 Chrome 中实现的,但它有一个缺点(对我来说)。我需要在服务器端设置标题。 由于我不会在这里讨论的原因,这是不行的。

所以我真正想知道的是:

为什么禁用浏览器的网络安全可以完成这项工作,而我需要服务器在使用 CORS 时允许请求?

    当我禁用网络安全时,浏览器内部究竟发生了什么?

    还有其他方法可以执行我的 CSR,而无需在服务器端添加标头或禁用安全性?

提前致谢

编辑: JSONP 也不成问题

【问题讨论】:

【参考方案1】:

为什么禁用浏览器的网络安全可以完成这项工作,而我在使用 CORS 时需要服务器允许请求?

同源策略的目的是防止 Mallory 的邪恶网站让 Alice 的浏览器访问 Bob 的网站并将 Alice 的数据暴露给 Mallory。

禁用浏览器中的安全性实际上是在说“我不在乎保护我在 Bob(或任何其他!)网站上的数据”。如果浏览器要靠近开放的网络,这是一件危险的事情。提供该选项是为了让开发更方便——我更喜欢可控性更强的解决方案(例如 Charles 代理中的 URL 重写选项)。

CORS 是 Bob 的网站,上面写着“此 URL 不包含任何 Mallory(或其他特定网站或所有人)不应访问的数据,因此他们可以访问它。Bob 的网站可以这样做,因为它知道其中哪些部分包含公共数据,哪些部分包含私有数据。

当我禁用网络安全时,浏览器内部究竟会发生什么?

它会禁用上述安全功能并减少对用户数据的保护。

还有另一种方法来执行我的 CSR,而无需在服务器端添加标头或禁用安全性?

代理。请参阅Ways to circumvent the same-origin policy,特别是the Reverse Proxy method。

【讨论】:

这是否意味着在服务器端设置标头完全没有意义,而客户端根本不会检查它?我一直以为服务器会检查请求是否正常.. 服务器无法知道请求是否由在另一个站点上运行的 javascript 触发。客户端检查它,并默认阻止对数据的访问。 CORS 标头告诉客户端不要担心并将请求的数据暴露给 JS。 有没有办法在客户端检查之前以某种方式操纵响应头?听说有一个 Firefox 插件可以完成这项工作。【参考方案2】:

我猜你正在使用 AJAX 请求,这是另一个问题 Ways to circumvent the same-origin policy 有一个很大的详细答案。

可以使用Flash对象(flash没有这个问题)

还有关于“可能发生的最坏情况”http://blogs.msdn.com/b/ieinternals/archive/2009/08/28/explaining-same-origin-policy-part-1-deny-read.aspx 和 http://en.wikipedia.org/wiki/Cross-site_scripting

【讨论】:

以上是关于为啥禁用浏览器网络安全(例如 Chrome)有助于执行跨站点请求?的主要内容,如果未能解决你的问题,请参考以下文章

chrome浏览器书签为啥不能同步

Chrome:禁用本地主机的同源策略

Chrome上的“禁用网络安全”是否仅适用于选定的网站?

如何在 Chrome 扩展程序中禁用同源策略?

为啥mac电脑的chrome浏览器视频监控无法打开摄像头?

自己用javascript设定cookie,可是为啥在chrome浏览器下却是无效的!