我有一个Web应用程序,我们目前正在实施XSRF保护。根据我的收集,XSRF攻击以这种方式工作:
为了测试我们的网站,我查看了客户端发送到服务器的POST HTTP请求,以便为其提供订单(在Internet Explorer中使用F12),并自行伪造。它看起来像这样:
https://mywebsite/Camp.aspx?
EventTarget=SaveButton
&TargetField=I+am+the+king+of+the+world
第一行是在浏览器中看到的URL(减去“?”),第二行是服务器要执行的操作,第三行是我想要更新的字段。
然后我登录网站并以两种方式测试了我的伪造请求:
A)我只需在浏览器中打开一个新标签,粘贴上面的伪造网址,然后点击输入(使用IE和Chrome测试)
B)我在另一个标签中打开一个包含内容的页面:
<html xmlns="http_www.w3.org/1999/xhtml">
<body>
<form method="post" action="https://mywebsite/Camp.aspx">
<input type="hidden" name="EventTarget" value="SaveButton">
<input type="hidden" name="TargetField" value="I+am+the+king+of+the+world">
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
(用GET和POST方法测试)
我希望两个测试都是相同的,但令我惊讶的是:
我有两个问题:
谢谢!
自己解决了这个问题。我显然已经发布了请求的简化版本。真实请求包含需要进行URL编码的标志。这里是符号“$”,它在URL中编码为“%24”。
所以,如果直接URL是
https://mywebsite/Camp.aspx?
EventTarget=abc%24def
然后相应的HTML表单应该是
<html xmlns="http_www.w3.org/1999/xhtml">
<body>
<form method="post" action="https://mywebsite/Camp.aspx">
<input type="hidden" name="EventTarget" value="abc$def">
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>