Dev_TechnoLabs Ответов: 2

Мне нужно реализовать защиту от подделки межсайтовых запросов (CSRF) в ASP.NET веб-форма


Мне нужно внедрить CSRF в asp.net веб - формы для предотвращения нежелательных межсайтовых запросов.

[edit]добавил слово "защита" в строку темы, чтобы предотвратить пинок "вредоносного кодера", и добавил блок кода в раздел "Что вы пробовали" - OriginalGriff[/edit]

Что я уже пробовал:

Я попробовал ниже код для реализации CSRF, но это не сработало для меня.
public class CSRFBASE : System.Web.UI.Page
    {
        private const string AntiXsrfTokenKey = "__AntiXsrfToken";
        private const string AntiXsrfUserNameKey = "__AntiXsrfUserName";
        private string _antiXsrfTokenValue;
        protected void Page_Init(object sender, 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.");
                }
            }
        }
    }

Kornfeld Eliyahu Peter

Вы хотите сказать, что хотите реализовать защиту от CSRF?!

Dev_TechnoLabs

Да

2 Ответов

Рейтинг:
1

Dev_TechnoLabs

большинство ссылок связаны с MVC. не полезно для меня

Kornfeld Eliyahu Peter

Учиться всегда полезно!!! Если не иначе, то о существовании других технологий за пределами Вебформ...
И последние два (особенно последний) - это именно то, что вы ищете... включая точный пример кода...

F-ES Sitecore

Итак, google "asp.net веб-формы защиты csfr" или ""asp.net csfr protection webforms -mvc". Хотите верьте, хотите нет, но вы не первый человек, который хочет это сделать, поэтому код легко доступен, если вы просто ищете его.

Dev_TechnoLabs

@F-ES Sitecore спасибо за ваше хорошее предложение. Я обязательно это сделаю.

Рейтинг:
0

Member 12718153

Use the below code:

In Design Page:
<div id="DivCSRF" runat="server"></div>

In Code Page:
Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
        DivCSRF.InnerHtml = AntiForgery.GetHtml().ToString()
    End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        DivCSRF.InnerHtml = AntiForgery.GetHtml().ToString()
        If IsPostBack Then
            Try
                AntiForgery.Validate()
            Catch ex As Exception
                Response.Redirect("~/Unauthorize.aspx", False)
                Exit Sub
            End Try
        End If