Мне нужно исправление ошибки CSRF для страницы aspx. Код выглядит так:
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 -
<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>
[ ! d3] Теперь при вставке & lt;% @ Html.AntiForgeryToken ()%> в верхней строке появляется ошибка «Серверный блок не сформирован правильно». Итак, как мне исправить ошибку.
Здесь вы используете веб-формы. У них уже есть анти-xsrf, установленный в шаблоне главной страницы (я думаю, что он заправлен всеми данными в представлении).
До тех пор, пока вы используете основную страницу, t!
Если вы не используете основную страницу, просто создайте свой собственный, используя состояние сеанса, скрытое поле и указатель. Я взял нижеследующее из 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);