Hardy Vadher Ответов: 0

Как осуществить 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

Приятно! Спасибо. :)

0 Ответов