Вопрос

В ASP.NET MVC 1.0 появилась новая функция для решения проблемы безопасности подделки межсайтовых запросов:

 <%= Html.AntiForgeryToken() %>
[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
    // ... etc
}

Я обнаружил, что токен, сгенерированный в форме html, продолжает меняться каждый раз, когда отображается новая форма.

Я хочу знать, как генерируются эти токены?И когда вы используете какое-либо программное обеспечение для сканирования этого сайта, оно сообщит о другой проблеме безопасности:Сессия исправлена.Почему?Поскольку токен постоянно меняется, как может возникнуть эта проблема?

И есть еще одна функция — «соль» для antiForgeryToken, но я действительно знаю, для чего это используется, даже если мы не используем «соль» для генерации токена, токен будет постоянно меняться, так зачем же такая функция?

Это было полезно?

Решение

Много информации об AntiForgeryToken здесь: http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

Это необходимо для предотвращения подделки межсайтового запроса (CSRF).Это довольно стандартное поведение: нажать «Сохранить», отправить форму и выполнить какое-то действие на сервере, т.е.сохранить данные пользователя.Откуда вы знаете, что пользователь, отправляющий форму, является тем пользователем, за которого он выдает себя?В большинстве случаев вы будете использовать аутентификацию на основе файлов cookie или Windows.

Что, если злоумышленник заманит вас на сайт, который отправляет точно такую ​​же форму в небольшом скрытом IFRAME?Ваши файлы cookie отправляются в целости и сохранности, и сервер не считает, что запрос чем-то отличается от законного запроса.(Как обнаружил Gmail: http://www.gnucitizen.org/blog/google-gmail-e-mail-hijack-technique/)

Токен защиты от подделки предотвращает эту форму атаки, создавая дополнительный токен cookie каждый раз при создании страницы.Токен находится как в форме, так и в файле cookie. Если форма и файл cookie не совпадают, мы имеем атаку CSRF (поскольку злоумышленник не сможет прочитать токен защиты от подделки с помощью атаки, описанной выше).

А что делает соль, из статьи выше:

Соль — это просто произвольная строка.Другое значение соли означает, что будет создан другой токен защиты от подделки.Это означает, что даже если злоумышленнику каким-то образом удастся заполучить действительный токен, он не сможет повторно использовать его в других частях приложения, где требуется другое значение соли.

Обновлять: Как генерируется токен?Загрузите источник, и взгляните на классы AntiForgeryDataSerializer, AntiForgeryData.

Другие советы

Вы задали несколько не связанных проблем:

<Ол>
  • Я не знаю, почему ваше программное обеспечение безопасности сообщает о "фиксированной сессии". Попробуйте прочитать документацию, прилагаемую к отчету.
  • Жетон защиты от подделки:
  • Это используется (предположительно) для проверки правильности каждого запроса. Поэтому учтите, что кто-то пытается представить ссылку на страницу ? X = 1 , если токен также не пройден, запрос будет отклонен. Кроме того, это (может) предотвратить повторное размещение одного и того же элемента. Если дважды щелкнуть «Опубликовать», токен, скорее всего, изменится (каждый запрос), и этот случай будет обнаружен с помощью чего-либо вроде:

    Session["nextToken"] = token;
    WriteToken(token);
    
    ...
    
    if( !Request["nextToken"] == Session["nextToken"] ){
        ...
    }
    
    // note: order in code is slightly different, you must take the token
    // before regenerating it, obviously
    

    Я думаю, что термин для этого (атака, которую он защищает) называется "CSRF" (Подделка межсайтовых запросов), в эти дни.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top