通过HTML表单和直接URL测试XSRF攻击

时间:2019-02-19 09:39:12

标签: html url csrf

我有一个Web应用程序,当前我们在该Web应用程序上实现XSRF保护。 据我所知,XSRF攻击的工作方式如下:

  • 攻击者发现客户端如何与服务器通信 Web应用程序,即其HTTP请求的格式
  • 攻击者重写(伪造)一个HTTP请求,该请求将命令 服务器做攻击者想要的事情
  • 攻击者现在所缺少的只是服务器上的身份验证
  • 攻击者诱骗人们加载一个发送其网页的网页 伪造的请求。在被欺骗的人中, 碰巧当前登录到应用程序将不情愿 向伪造的请求提供需要执行的凭据 通过服务器。

为了测试我们的网站,我查看了客户端发送到服务器的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方法进行测试)

我希望两个测试都相同,但令我惊讶的是:

  • 测试A打开网站上的目标页面并实际更新 目标字段
  • 测试B在网站上打开目标页面,但未更新 目标字段

我有2个问题:

  1. 为什么测试A和测试B会带来不同的结果?
  2. 测试B绝对是有效的CSRF攻击测试(即使 攻击者宁愿不打开 页),测试A也有效吗?

谢谢!

1 个答案:

答案 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>