Как осуществить CSRF-атаку, код в класс.CS в ASP.NET.
Любой может мне в этом помочь.
Я реализовал код CSRF в
baseclass.cs
в моем asp.net проект, но он не работает. но когда я помещаю этот код на главную страницу, он работает для меня.
Что я должен сделать, чтобы реализовать его в
baseclass.cs
Что я уже пробовал:
public class BaseClass : System.Web.UI.Page, IDisposable {
private const string AntiXsrfTokenKey = "__AntiXsrfToken"; private const string AntiXsrfUserNameKey = "__AntiXsrfUserName"; private string _antiXsrfTokenValue; protected override void OnInit(EventArgs e) { // The code below helps to protect against XSRF attacks var requestCookie = Request.Cookies[AntiXsrfTokenKey]; Guid requestCookieGuidValue; if (requestCookie != null && Guid.TryParse(requestCookie.Value, out requestCookieGuidValue)) { // Use the Anti-XSRF token from the cookie _antiXsrfTokenValue = requestCookie.Value; Page.ViewStateUserKey = _antiXsrfTokenValue; } else { // Generate a new Anti-XSRF token and save to the cookie _antiXsrfTokenValue = Guid.NewGuid().ToString("N"); Page.ViewStateUserKey = _antiXsrfTokenValue; var responseCookie = new HttpCookie(AntiXsrfTokenKey) { HttpOnly = true, Value = _antiXsrfTokenValue }; if (FormsAuthentication.RequireSSL && Request.IsSecureConnection) { responseCookie.Secure = true; } Response.Cookies.Set(responseCookie); } Page.PreLoad += master_Page_PreLoad; } protected void master_Page_PreLoad(object sender, EventArgs e) { if (!IsPostBack) { // Set Anti-XSRF token ViewState[AntiXsrfTokenKey] = Page.ViewStateUserKey; ViewState[AntiXsrfUserNameKey] = Context.User.Identity.Name ?? String.Empty; } else { // Validate the Anti-XSRF token if ((string)ViewState[AntiXsrfTokenKey] != _antiXsrfTokenValue || (string)ViewState[AntiXsrfUserNameKey] != (Context.User.Identity.Name ?? String.Empty)) { throw new InvalidOperationException("Validation of Anti-XSRF token failed."); } } }
}
Nathan Minier
Если вы используете систему.Веб, почему ты не используешь встроенный Антифорджеритокен?
Richard Deeming
Доступно ли это для веб-форм? Я только когда-либо видел, чтобы это упоминалось в связи с MVC.
Nathan Minier
Так оно и есть, благодаря Антифорджери.GetHtml ().
https://msdn.microsoft.com/en-us/library/gg537903(v=vs. 111). aspx
В отдельной Page_Load вы просто должны быть в состоянии
if (IsPostBack) {AntiForgery.Validate ();}, при условии, что вы установили токен на этой странице.
Я не взломал исходный код, но из того, что я понимаю, токен хэшируется из Пути, поэтому, если у вас есть страницы, которые не опираются на главную страницу, вам нужно будет назначить его на каждую страницу.
ИМО, однако, лучше всего сделать мастер, который просто выполняет анти-валидацию, и строить шаблоны оттуда.
Взгляните на заметки MSDN для этого класса:
https://msdn.microsoft.com/en-us/library/system.web.helpers.antiforgery(v=vs. 111). aspx
Richard Deeming
Приятно! Спасибо. :)