Javascript 关于CORS的安全问题

Javascript 关于CORS的安全问题,javascript,php,ajax,security,cors,Javascript,Php,Ajax,Security,Cors,我刚刚了解了CORS,基本上是因为我直到现在才需要它 我已经读到CORS通过发送带有AJAX调用的HTTP头来启用跨站点源,这样其他服务器就可以评估来自已批准站点的请求 现在我主要关心的是,HTTP头不能被欺骗吗?例如,攻击者不能将请求卷曲到另一台服务器,发送与我的CORS请求完全相同的HTTP头吗? 在这种情况下,服务器将接受请求,攻击者将检索服务器发送给他的任何敏感数据 我们都知道从页面检索javascript是多么容易,所以我用CORS发送的所有内容都可以被敏锐的眼睛看到。包括HTTP头

我刚刚了解了CORS,基本上是因为我直到现在才需要它

我已经读到CORS通过发送带有AJAX调用的HTTP头来启用跨站点源,这样其他服务器就可以评估来自已批准站点的请求

现在我主要关心的是,HTTP头不能被欺骗吗?例如,攻击者不能将请求卷曲到另一台服务器,发送与我的CORS请求完全相同的HTTP头吗? 在这种情况下,服务器将接受请求,攻击者将检索服务器发送给他的任何敏感数据

我们都知道从页面检索javascript是多么容易,所以我用CORS发送的所有内容都可以被敏锐的眼睛看到。包括HTTP头

所以,我猜敏感信息不应该在CORS通信中共享。。。 还是我把一切都搞错了? 请给我点光!:) 谢谢

现在我主要关心的是,HTTP头不能被欺骗吗?例如,攻击者不能将请求卷曲到另一台服务器,发送与我的CORS请求完全相同的HTTP头吗

你有两个误解

  • CORS头由服务器而不是客户端发送(尽管有时客户端会发出飞行前选项请求)
  • 同一原产地政策所针对的是什么
  • 存在相同来源的政策,通过在Alice访问Mallory的网站时要求Alice的浏览器请求数据,阻止Mallory(邪恶)的网站从Bob的网站获取数据

    如果这是可能的话,那么马洛里就可以得到任何应该是爱丽丝和鲍勃之间共享秘密的信息(比如爱丽丝在鲍勃银行网站上的账户余额)

    攻击者不能将请求卷曲到另一台服务器,发送与我的CORS请求完全相同的HTTP头吗

    由于Mallory无法知道请求中需要包含哪些安全凭据(例如,因为它们存储在Alice的cookies中,用于Bob的网站):不

    但是CORS在这里并不重要,但是同源策略不是由cURL实现的,因为它不是运行任意网站提供的JavaScript的浏览器

    我想在CORS通信中不应该共享敏感信息

    这取决于信息的性质

    如果允许Alice和您在CORS标题中授权的任何网站查看它,那么发送它(尽管您可能应该使用SSL):只要您已经验证了Alice的身份

    如果只有Alice和您的站点应该看到它,那么不要将CORS头放在上面(并且不要提供任何其他方式来绕过同源策略,例如JSON-p)


    如果Alice不应该看到它,那么您永远不应该将它发送到Alice的浏览器,CORS或no CORS。

    是的,我说的是飞行前选项请求。无论如何,根据您的回答,Mallory向Bob发出CORS请求不需要知道安全凭据(如cookies、会话等)?至于curl,当然CORS并不重要,我只是举了一个例子,任何人都可以轻松地“模仿”CORS请求。请求所能做的所有选项就是告诉Mallory在请求中可以使用哪些头。这些信息(在CORS的上下文中)没有用处,因为cURL一开始并没有实现同源策略,所以如果包含“错误”的头,则没有任何东西可以阻止后续请求被发送。好的,谢谢!基于您的回答和我想做的,我可以实现我的想法,没有任何安全风险,也没有攻击者模仿CORS行为的风险。如果我需要更多关于这个问题的澄清,我会让你知道的。再次感谢!