какая польза от соли для подделки токенов? - PullRequest
16 голосов
/ 10 сентября 2009

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

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

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

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

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

Ответы [ 2 ]

20 голосов
/ 10 сентября 2009

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

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

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

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

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

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

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

1 голос
/ 10 сентября 2009

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

  1. Я не знаю, почему ваше программное обеспечение безопасности сообщает о «фиксированной сессии». Попробуйте прочитать документацию, прилагаемую к отчету
  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" (Подделка межсайтовых запросов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...