【问题标题】:Wouldn't have been simpler to just discard cookies for cross-domain XHR?丢弃跨域 XHR 的 cookie 不是更简单吗?
【发布时间】:2012-10-18 03:01:44
【问题描述】:

在为 Web 开发时,我一直在与奇怪的限制作斗争。其中之一是 AJAX 请求的同源限制,我在问自己,如果不是阻止对跨域资源的请求,而是在制作 cookie 时丢弃它们(以避免滥用浏览器会话)。

Cookie 是一种工具,但并非必不可少(例如,如果您需要保留上下文,您可以在请求 URL 中生成带有 cookie 的页面),而绕过跨域阻止非常烦人。

在我看来,从逻辑的角度来看,阻止特定主体访问全世界其他人无需身份验证即可访问的资源,这在我看来也很奇怪。

我想知道同源策略是否真的是最好的解决方案是否有一些真正的技术原因。

请注意,我只是出于好奇...例如,Javascript 的很大一部分)。

【问题讨论】:

  • 好的,我们允许没有 cookie 的 xmlhttpreq,例如,您在 127.0.0.1 上有开发服务器,现在外部没有人可以从您的 127.0.0.1 获取数据到自己的上下文,并且您想让他能够,想想看 - 不仅有基于 cookie 的身份验证,还有防火墙、网络上下文和其他东西。下一步,您将希望 websockets 对不同的来源开放......
  • 但是,如果您知道本地网络上的 url,例如 192.168.1.1/router?action=shutdown,则会出现一些安全问题

标签: javascript html cookies xmlhttprequest same-origin-policy


【解决方案1】:

您假设所有身份验证凭据都是基于 cookie 的,但事实并非如此。浏览器可能会使用 PKI 证书对另一个站点进行身份验证,或者该站点可能会信任客户端,因为它在受信任的网络上具有特定的 IP 地址。这不是客户可以针对单个请求关闭的功能。

但是,standardizing a way for sites to allow cross-origin requests 正在对其资源进行处理。如果一个站点知道它的某些内容是公开的并且没有客户端具有特殊权限,它可以设置一个 HTTP 标头来告诉浏览器允许从其他站点加载的脚本查看该内容。

在我看来,从逻辑的角度来看,阻止特定主体访问全世界其他人无需身份验证即可访问的资源,这在我看来也很奇怪。

浏览器不知道全世界都可以在没有身份验证的情况下访问资源。它不知道在访问给定 URL 时是否看到与其他客户端相同的内容。它阻止的是访问它自己的,可能是唯一的,远程资源的视图

【讨论】:

  • “浏览器不知道全世界都可以在没有认证的情况下访问资源”......它知道是因为它在没有回收认证的情况下发出请求。如果服务器仅仅因为请求来自某个地方而决定提供信息或执行交易,那么这无论如何都是服务器端的安全问题。依靠安全性,因为“好”的浏览器不允许错误的请求,这是 IMO 解决问题的错误方面。
  • 在诸如受信任的公司网络之类的东西上,可能使用像 802.1X 这样的较低级别的身份验证方案,服务器通过其 IP 地址识别客户端并不是不合理的。这可能仍然不是最好的主意,但也不是最差的。
猜你喜欢
  • 1970-01-01
  • 2012-11-08
  • 2019-04-30
  • 2011-03-15
  • 2020-04-02
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多