Подтвердить что ты не робот

Какая польза от анти-подделки?

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

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

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

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

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

4b9b3361

Ответ 1

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

Это необходимо для предотвращения подбора запросов на межсайтовый запрос (CSRF). Это довольно стандартное поведение, чтобы щелкнуть "Сохранить" в форме и выполнить некоторые действия на сервере, т.е. Сохранить данные пользователя. Как вы знаете, что пользователь, представляющий форму, является пользователем, которого они утверждают? В большинстве случаев вы должны использовать некоторые файлы cookie или windows на основе auth.

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

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

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

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

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

Ответ 2

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

  • Я не знаю, почему ваше программное обеспечение безопасности сообщает о фиксированной сессии. Попробуйте прочитать документацию, содержащую отчет
  • Символ анти-подделки:

Это используется (предположительно) для проверки того, что каждый запрос действителен. Поэтому подумайте, что кто-то пытается представить ссылку на страницу ?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" (Cross-Site Request Forgery), в наши дни.