CSRF-атаки не являются исключительными для приложения MVC, веб-формы также уязвимы.
По сути, CSRF-атака использует доверие, которое сайт оказывает браузеру пользователя, запрашивая или публикуя информацию на сайте, как правило, через скрытые формы или JavaScript XMLHttpRequests на вредоносном веб-сайте, когда пользователь использует файлы cookie, хранящиеся в браузере.
Чтобы предотвратить эту атаку, вам понадобится токен защиты от подделки, уникальный токен, отправленный в ваших формах, который необходимо проверить, прежде чем доверять информации формы.
Вы можете найти подробное объяснение здесь .
Чтобы защитить приложения веб-форм от CSRF-атак (это работает в моих проектах), нужно внедрить их в свои главные страницы, например:
Добавьте новый класс, который будет обрабатывать проверки CSRF для вас:
public class CsrfHandler
{
public static void Validate(Page page, HiddenField forgeryToken)
{
if (!page.IsPostBack)
{
Guid antiforgeryToken = Guid.NewGuid();
page.Session["AntiforgeryToken"] = antiforgeryToken;
forgeryToken.Value = antiforgeryToken.ToString();
}
else
{
Guid stored = (Guid)page.Session["AntiforgeryToken"];
Guid sent = new Guid(forgeryToken.Value);
if (sent != stored)
{
// you can throw an exception, in my case I'm just logging the user out
page.Session.Abandon();
page.Response.Redirect("~/Default.aspx");
}
}
}
}
Затем внедрите это в свои главные страницы:
MyMasterPage.Master.cs:
protected void Page_Load(object sender, EventArgs e)
{
CsrfHandler.Validate(this.Page, forgeryToken);
...
}
MyMaster.Master:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:HiddenField ID="forgeryToken" runat="server"/>
...
</form>
Надеюсь, вы найдете это полезным.