是否可以使用 img/script 标签读取敏感信息的某种 CSRF

信息安全 http csrf 网络 西西
2021-08-18 08:23:35

假设我有一个 API https://mysite/api/getSensitiveData

  • 使用 GET
  • 受 cookie 身份验证保护
  • 返回带有一些敏感数据的 JSON

一个坏人在他的服务器上创建了一个带有图像标签的网站:

<img src="https://mysite/api/getSensitiveData"><img>

现在浏览器将执行此请求并发送 cookie 并加载数据(至少据我所知),然后由于它不是图像,因此不会显示任何内容。

但是该请求是在一个坏人控制 javascript 的网站上执行的。有什么方法可以从图像中读取响应,拦截请求或其他方法?

PS也许还有其他一些类似的可能性,不一定是img标签?

1个回答

只有一个图像标签 - 不。为了让攻击者能够从 API 端点收集数据并将其返回给自己,他必须在他的控制下的页面上安装 javascript。使用 javascript/ajax 请求,浏览器仍将传递 cookie 并因此验证他的请求,可能允许他接收响应,然后将其发送到新服务器。

但是,任何这样做的尝试都将违反浏览器中的同源策略。这表明如果脚本从具有不同主机、端口或协议的站点请求文档,则脚本将拒绝响应,除非目标站点明确批准。批准跨域请求的最常见方式是通过 CORS。因此,攻击者能够真正从您的端点读取响应并检索数据的唯一方法是,如果您(域所有者)明确告诉 CORS 允许使用凭据,并将恶意软件的域名列入白名单。 javascript 正在运行。

为了绕过这个限制,攻击者必须让他们自己的 javascript 在你的域上运行,但是在那个时候我们正在谈论 XSS 攻击,你几乎被水洗了。即使使用配置良好的 CSP 标头成功进行 XSS 攻击,也有一些方法可以防止数据返回给攻击者,但是 CSP 标头可能很难正确处理,而且它们还没有广泛的浏览器支持(尤其是 IE )。

与您所说的最接近的类似物是 XSSI/JSON 劫持。这些是绕过浏览器中同源策略限制的不同技术:

http://www.thespanner.co.uk/2011/05/30/json-hijacking/

然而,允许绕过这些限制的技术已在现代浏览器中大量修补,使得漏洞的相关性大大降低:

https://stackoverflow.com/q/16289894/1921979

将来总是有可能发现其他此类弱点,在这种情况下,有一些技术可以防止 XSSI (h/t Xavier59):

https://security.stackexchange.com/a/110552/110133