【问题标题】:How can XSRF Attacks be used outside of img tags?如何在 img 标签之外使用 XSRF 攻击?
【发布时间】:2018-06-26 21:51:00
【问题描述】:

所以我目前正在开发一个 Web 应用程序,并且我选择使用 JWT 作为我的 api 的访问令牌。

我已尝试阅读有关 XSRF 攻击的所有内容,当我尝试更深入地了解它们的执行方式时,我似乎得到的唯一答案是攻击者创建了一个站点并诱使用户加载它。攻击者的站点包含一个 img 标签,它向我的 URI 发送一个 GET 请求,由于 javascript 会自动添加用户的 cookie 以及对我的 URI 的调用。

第一个问题:有人真的允许从 GET 更改数据服务器端吗?或者这只是攻击者检索用户数据的方式?

第二个问题:如何使用 POST/PUT 执行 XSRF 攻击?我似乎无法在任何地方找到一个明确的例子。诡计网站可以只对我的 URI 运行 AJAX 调用,然后用户的 cookie 会随它一起发送吗?如果是这样,为什么要打扰整个 img 标签的事情呢?普通用户不会查看源代码。

【问题讨论】:

  • 您也可以使用GET请求更新数据。您将数据作为查询参数的一部分传递,用于更改数据(这更像是一种 hack)
  • Sushanth 的理论可以通过设计一个使用GET 方法而不是POST 方法的表单来证明,并观察表单提交导致变化的URL。
  • 小修正:不是 JavaScript 会自动将 cookie 添加到请求中,而是浏览器本身。好问题!

标签: javascript jwt csrf


【解决方案1】:

正如您所提到的,跨域的 GET 请求最容易发出(使用图像或 iframe)。 POST 请求也非常简单,而且 CORS 也不总是保护您。

假设用户通过 cookie 登录到 email.comemail.com 允许通过其界面中的简单 HTTP 表单发送电子邮件,如下所示:

<form action="https://email.com/sendMsg" method="post">
  <label>To: <input name="to" /></label>
  <label>Your message: <textarea name="msg"></textarea></label>
  <button type="submit">Send</button>
</form>

但是表单可以跨域发送 - 一直都是这样,而且通常也是需要的。表单也将与 cookie 一起发送。

但是等等,我们如何在 XSRF 中利用它? 好吧,攻击者evil.com 可能有这样的隐藏表单:

<form id="xsrf" action="https://email.com/sendMsg" method="post">
  <label>To: <input name="to" value="user@example.com" /></label>
  <label>Your message: <textarea name="msg">Did you see this? :-D http://evil.com/you-should-not-go-there</textarea></label>
</form>
<script>document.getElementById('xsrf').submit()<script>

你猜怎么着?表单刚刚提交,email.com 看起来是合法的,因为会话 cookie 也会被发送。

这里的缺点是表单提交会离开当前页面,但如果攻击者将表单放入不可见的 iframe 中,这不会有问题。

纯 javascript XSRF 帖子

假设我们对email.com 使用与以前相同的“API” - 使用tomsg 向某人发送电子邮件的POST 请求。

您可能认为evil.com 上的以下代码不会因为 CORS 而导致问题:

fetch('https://email.com/sendMsg', {method: 'POST', body: 'to=a@b.com&msg=Hello+World', credentials: 'include' })

这实际上也是一个 XSRF 向量。如果 CORS 标头丢失,CORS 会引发错误并且不会使网络响应可用,但仍然会发出请求

通常这没什么用,但在我们的例子中,没有 XSRF 保护,因此我们发出 POST 请求并发送电子邮件!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2013-04-29
    • 2011-01-09
    • 2018-03-06
    相关资源
    最近更新 更多