允许的CORS策略:可以检索和解析跨域,经过身份验证的请求的响应吗?

时间:2013-10-04 09:36:17

标签: ajax security rest cross-domain cors

我在这个网站上阅读了几十篇很棒的帖子后报名参加了这个问题。这是我未解决的问题,无疑是以应用安全为重点:

对于在调用REST服务时返回以下标头的站点:

Content-Type: application/json
Access-Control-Allow-Origin: *

认识到这种宽松的CORS策略对于返回敏感数据的服务来说是不好的做法,但我必须证明威胁行为者是否有可能调用经过身份验证的 REST服务(cookie auth)代表经过身份验证的受害者,以便威胁行为者了解响应。

我理解这个标志指示浏览器发送相关的cookie以及跨域请求:

withCredentials: true

我观察到浏览器拒绝允许威胁参与者解释返回的响应,这意味着JSON对象被返回到浏览器(由代理或数据包捕获证明)但是永远不会到达威胁可访问的DOM演员他或她自己。

例如,当我通过jQuery调用上述REST服务时,Chrome会生成消息“当凭据标志为真时,无法在Access-Control-Allow-Origin中使用通配符”。如果我尝试JSONP,我收到消息“ Uncaught SyntaxError:Unexpected token:”,因为我没有权限修改REST服务逻辑以返回正确的回调字符串。

威胁行为者是否真的无法成功利用过度宽松的CORS策略来调用REST服务并代表受害者的经过身份验证的会话检索/解析/返回其响应? < / p>

我担心:

  • 我不知道一两个技巧
  • 某些浏览器可能无法主动阻止此类“攻击”

非常感谢任何见解,因为我不是开发人员 - 谢谢!

2 个答案:

答案 0 :(得分:1)

接受凭证请求时,您无法使用通配符。

  

在回复凭据请求时,服务器必须指定域,并且不能使用通配符1

此外,您似乎需要设置以下标头作为REST服务Access-Control-Allow-Credentials: true的响应发送

答案 1 :(得分:0)

如果您使用的是Apache,则可以添加.htaccess:

SetEnvIf Origin "^http(s)?://(.*)$" origin_is=$0 
Header set Access-Control-Allow-Origin %{origin_is}e env=origin_is

该指令在then request中添加一个与域名一致的Acess-control-allow-origin。它在响应头中复制Origin请求的值。