我有一个Web应用程序,当前我们在该Web应用程序上实现XSRF保护。 据我所知,XSRF攻击的工作方式如下:
为了测试我们的网站,我查看了客户端发送到服务器的POST HTTP请求以发出命令(使用Internet Explorer中的F12),并亲自伪造了一个。 看起来像这样:
https://mywebsite/Camp.aspx?
EventTarget=SaveButton
&TargetField=I+am+the+king+of+the+world
第一行是浏览器中显示的URL(减去“?”),第二行是服务器要执行的操作,第三行是我要更新的字段。
然后,我登录了网站并以两种方式测试了伪造的请求:
A)我只是在浏览器中打开一个新标签,将伪造的URL粘贴在上面,然后单击Enter (已通过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方法进行测试)
我希望两个测试都相同,但令我惊讶的是:
我有2个问题:
谢谢!
答案 0 :(得分:0)
本人解决了问题。 我显然已经发布了该请求的简化版本。实际请求包含需要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>