в чем польза соли токена против подделки?
В ASP.NET MVC 1.0, появилась новая функция для решения проблемы безопасности подделки межсайтовых запросов:
<%= Html.AntiForgeryToken() %>
[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
// ... etc
}
Я обнаружил, что токен, сгенерированный в html-форме, постоянно меняется каждый раз, когда отображается новая форма.
Я хочу знать, как генерируется этот токен? И когда вы используете какое-то программное обеспечение для сканирования этого сайта, оно сообщит о другой проблеме безопасности: исправлена сессия. Почему? Поскольку маркер постоянно меняется, как может возникнуть эта проблема ?
И есть еще одна функция, которая называется "соль" для antiForgeryToken
, но я действительно знаю, для чего это используется, даже если мы не используем "соль" для генерации токена, Токен будет меняться все время, так зачем иметь такую функцию?
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.
Вы задали несколько несвязанных проблем:
- я не знаю, почему ваше программное обеспечение безопасности сообщает о "фиксированной сессии". Попробуйте прочитать документацию, прилагаемую к отчету
- маркер защиты от подделки:
Это используется (предположительно) для проверки правильности каждого запроса. Так что считайте, что кто-то пытается представить ссылку на страницу
?x=1
, если токен также не будет передан, запрос будет отклонен. Кроме того, это (может) предотвратить дублирование проводки одного и того же товара. Если вы нажмете "post" дважды, маркер, скорее всего, изменится (каждый запрос), и этот случай будет обнаружен через что-то вроде:Я думаю, что термин для этого (атаки, которую он защищает) называется "CSRF" (подделка межсайтовых запросов), в наши дни.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