в чем польза соли токена против подделки?


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

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

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

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

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

2 16

2 ответа:

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

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

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

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

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

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

Update: как генерируется токен? Загрузите исходный код и посмотрите на классы AntiForgeryDataSerializer, AntiForgeryData.

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

  1. я не знаю, почему ваше программное обеспечение безопасности сообщает о "фиксированной сессии". Попробуйте прочитать документацию, прилагаемую к отчету
  2. маркер защиты от подделки:

Это используется (предположительно) для проверки правильности каждого запроса. Так что считайте, что кто-то пытается представить ссылку на страницу ?x=1, если токен также не будет передан, запрос будет отклонен. Кроме того, это (может) предотвратить дублирование проводки одного и того же товара. Если вы нажмете "post" дважды, маркер, скорее всего, изменится (каждый запрос), и этот случай будет обнаружен через что-то вроде:

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" (подделка межсайтовых запросов), в наши дни.