在Viewstate中使用XSS防御CSRF

时间:2014-09-03 15:22:50

标签: asp.net xss viewstate csrf

我正在为我正在处理的网站进行漏洞测试。在测试过程中,我发现该网站存在问题。我创建了一个小型Web表单,将数据提交到其他Web表单并运行一些JavaScript。小网站可以在下面查看:

<form name="aspnetForm" method="post" action="https://[URL]" onsubmit="javascript:return WebForm_OnSubmit();" id="aspnetForm">
<type="hidden" select name="ctl00$ContentPlaceHolder1$ddlCategory" id="ctl00_ContentPlaceHolder1_ddlCategory">
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="</span><script>alert(1);</script><span>" />
</div>
<input type="submit" name="ctl00$ContentPlaceHolder1$btnSubmit" value="Submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ContentPlaceHolder1$btnSubmit&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="ctl00_ContentPlaceHolder1_btnSubmit" />
</form>

当我运行时点击此表单上的提交按钮,我在网页上收到错误说明: “视图状态无效”,但视图状态中的JavaScript仍在执行。

默认情况下,EnableEventValidation设置为true,并且被web.config或页面覆盖。如何强制验证viewstate,但不执行JavaScript?

1 个答案:

答案 0 :(得分:0)

问题不在于在表格中防御CSRF或XSS。问题是错误页面在发生错误后打印出未经过清理的视图状态字符串。