我需要修复aspx页面的CSRF缺陷。代码是这样的-
ASPX-
<asp:Content runat='server'>
<asp:Panel runat='server'>
<table>
<tr>
<td>Username</td>
<td><asp:TextBox runat="server" ID="Username" autocomplete="off"></asp:TextBox></td>
</tr>
<tr>
<td>Password</td>
<td><asp:TextBox runat="server" ID="Password" TextMode="Password" autocomplete="off"></asp:TextBox></td>
</tr>
<tr>
<asp:Button ID="Submit" runat="server" Text="Submit"
OnClick="SubmitButton_Click" CssClass="Resizable" />
</tr>
</table>
</asp:Panel>
</asp:Content>
ASPX.cs-
protected void SubmitButton_Click(object sender, EventArgs e)
{
//Code here
}
现在,在顶部插入<%@ Html.AntiForgeryToken()%>时抛出错误“服务器块格式不正确”。那么我应该如何进行修复。
答案 0 :(得分:0)
您在这里使用网络表单。他们已经在母版页模板中设置了anti-xsrf(我认为它已经包含了所有的viewstate数据)。
只要您使用母版页,就不必担心。
如果您不使用母版页,则可以使用会话状态,隐藏字段和GUID来构建自己的母版页。我摘自http://willseitz-code.blogspot.com/2013/06/cross-site-request-forgery-for-web-forms.html
的以下内容您的隐藏场...
<asp:HiddenField ID="antiforgery" runat="server"/>
执行工作服务器端的代码...
public static class AntiforgeryChecker
{
public static void Check(Page page, HiddenField antiforgery)
{
if (!page.IsPostBack)
{
Guid antiforgeryToken = Guid.NewGuid();
page.Session["AntiforgeryToken"] = antiforgeryToken;
antiforgery.Value = antiforgeryToken.ToString();
}
else
{
Guid stored = (Guid) page.Session["AntiforgeryToken"];
Guid sent = new Guid(antiforgery.Value);
if (sent != stored)
{
throw new SecurityException("XSRF Attack Detected!");
}
}
}
}
最后,在您的Page_Load
方法中,以下代码...
AntiforgeryChecker.Check(this, antiforgery);