为什么XMLHttpRequest的原始策略相同

Bar*_*lom 30 security jsonp javascript-security

为什么浏览器将相同的源策略应用于XMLHttpRequest?它对开发人员来说真的很不方便,但它似乎在实际阻止黑客方面做得很少.有解决方法,它们仍然可以包含来自外部源的javascript(JSONP背后的力量).

这似乎是网络中过时的"功能",它在很大程度上是相互关联的.

bob*_*nce 23

因为XMLHttpRequest传递用户的身份验证令牌.如果用户使用基本身份验证或某些cookie登录到example.com,然后访问了attacker.com,后一个站点可以为example.com创建XMLHttpRequest,并对该用户进行完全授权,并读取用户可以访问的任何私有页面(然后把它转发回攻击者).

因为在webapp页面中放置秘密令牌是阻止简单跨站点请求伪造攻击的方法,这意味着,攻击者可以在未经用户同意或互动的情况下采取用户在example.com上进行的任何页面操作.全局XMLHttpRequest是全局跨站点脚本.

(即使您有一个未通过身份验证的XMLHttpRequest版本,仍然存在问题.例如,攻击者可以向您的Intranet上的其他非公共计算机发出请求并读取它可以从中下载的任何文件,这些文件可能不会将意味着公共消费.<script>标签已经从这种漏洞的有限形式的遭遇,但XMLHttpRequest的的完全可读的反应会泄漏各类文件,而不是几个不幸的是制作者可以解析为JavaScript代码.)

  • 它被称为"起源".它以及允许安全的跨站点请求的相关标准正在准备中,但它需要很长时间才能完全标准化并且可以使用.有关此领域的工作,请参见http://www.w3.org/TR/XMLHttpRequest2/. (4认同)
  • 推荐人检查不是一种安全机制,除了水蛭预防外,不应该用于任何其他任何事情.在任何情况下,某些实现都允许脚本(以及许多其他任意头)将`Referer`头设置为任何内容. (2认同)
  • Referer标头经常被代理阻止或根本不被转发.你还需要`Vary:Referer`,这会让缓存变得不快乐.今天不应该依赖它,当然也不应该用它来构建新的安全系统. (2认同)