Исправление разметки CSRF - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть результат, подтверждающий, что следующей строке нужен секрет для предотвращения CSRF

<form id ="form1test1" runat="server">

У меня есть случайный GUID, генерируемый при загрузке страницы, я хочу сравнить его, когда форма публикуется.

Я видел, как в классическом asp токен вставляется в действие в виде строки запроса

Я пытаюсь:

<form "form1test1" runat="server" 
      action='<%# string.Concat(Eval("login.aspx/?Token="),"",Eval(Session["Token"].ToString()))%> '> > 

Лучшее, что я получаю - это распечатка текста, но не значений, не выполнение этого в коде не исправляет обнаружение в fortify пытаясь что-то вроде

<form "form1test1" runat="server" action="login.aspx/?Token=12345DEF">

1 Ответ

0 голосов
/ 13 сентября 2018

Лучший способ предотвратить атаки CSRF (это работает над моими проектами), это внедрить его в свои главные страницы, например:

Добавьте новый класс, который будет обрабатывать проверки CSRF для вас:

public class CsrfHandler
{
    public static void Validate(Page page, HiddenField forgeryToken)
    {
        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)
            {
                // 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>

Надеюсь, вы найдете это полезным.

...