所以我目前正在开发一个Web应用程序,我选择使用JWT作为我的api的访问令牌。
我已尽力阅读有关XSRF攻击的所有内容,当我尝试深入了解它们的执行方式时,我似乎得到的唯一答案是攻击者创建一个网站并欺骗用户加载它。攻击者的网站包含一个img标记,该标记向我的URI发送GET请求,该请求由于javascript自动添加用户的cookie以及对我的URI的调用而起作用。
第一个问题:是否有人真的允许从GET改变数据服务器端?或者这只是攻击者如何检索用户数据?
第二个问题:如何使用POST / PUT执行XSRF攻击?我似乎无法在任何地方找到明确的例子。技巧网站是否可以对我的URI运行AJAX调用,用户的cookie会随之发送?如果是这样,为什么要烦扰整个img标签呢?普通用户不会检查源代码。
答案 0 :(得分:2)
如您所述,跨域的GET请求最容易(使用图片或iframe)。 POST请求也非常简单,CORS也不会一直保护你。
我们假设用户已通过Cookie登录email.com
,email.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
- to
和msg
发送电子邮件给某人的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请求并发送了电子邮件!