0

在阅读了该网站上的数十篇精彩帖子后,我报名提出了这个问题。这是我未回答的问题,公认的重点是应用程序安全性:

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

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

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

我了解此标志指示浏览器将相关 cookie 与跨域请求一起发送:

withCredentials: true

我观察到浏览器拒绝让攻击者解释返回的响应,这意味着 JSON 对象被返回给浏览器(如代理或数据包捕获所证明的那样),但永远无法到达攻击者可以访问的 DOM,或者她自己。

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

威胁行为者真的不可能成功地利用过度宽松的 CORS 策略来调用 REST 服务并代表受害者经过身份验证的会话检索/解析/返回其响应吗?

我担心:

  • 我不知道一两个技巧
  • 一些浏览器可能不会主动阻止这种“攻击”

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

4

2 回答 2

1

接受凭据请求时不能使用通配符。

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

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

于 2013-10-04T16:55:48.933 回答
0

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

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

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

于 2016-01-15T12:16:31.020 回答