Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过HTML表单测试XSRF攻击&;直接网址_Html_Url_Csrf - Fatal编程技术网

通过HTML表单测试XSRF攻击&;直接网址

通过HTML表单测试XSRF攻击&;直接网址,html,url,csrf,Html,Url,Csrf,我有一个web应用程序,我们目前在其上实现XSRF保护。 据我所知,XSRF攻击的工作方式如下: 攻击者发现客户端如何与的服务器通信 web应用程序,即其HTTP请求的格式 攻击者重写(伪造)一个http请求,该请求将命令 服务器执行攻击者想要的操作 攻击者现在缺少的只是服务器上的身份验证 攻击者诱使人们加载一个网页来发送他的信息 伪造的请求。那些被欺骗的人,那些 碰巧当前登录的应用程序将不愿意 为伪造请求提供需要执行的凭据 通过服务器 为了测试我们的网站,我查看了客户端发送给服务器的POS

我有一个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和铬合金进行测试)

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>

document.forms[0]。提交();
(使用GET和POST方法进行测试)

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

  • 测试A打开网站上的目标页面并实际更新 目标场
  • 测试B打开网站上的目标页面,但不更新 目标场
我有两个问题:

  • 为什么测试A和测试B会带来不同的结果
  • 测试B肯定是有效的CSRF攻击测试(即使 攻击者宁愿在不打开服务器的情况下执行该操作 第页),测试A是否也有效
  • 谢谢

    我自己解决了这个问题。 我显然已经发布了一个简化版的请求。真正的请求包含需要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>
    
    
    document.forms[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>
    
    
    document.forms[0]。提交();