Что означает "[ValidateAntiForgeryToken]"?
Во-первых, я все еще стартер в MVC4, заметив, что многие действия украшены [ValidateAntiForgeryToken]
, я googled, но все равно путаюсь.
Может кто-нибудь объяснить эту концепцию, используя простейший пример?
Ответы
Ответ 1
Простыми словами он предотвращает внешние почтовые запросы. Таким образом, никто не может использовать ваши методы с других сайтов.
Как это работает. У вас AntiForgeryToken
в вашем Html.BeginForm
в представлении.
@using (Html.BeginForm()){
@Html.AntiForgeryToken()
//** fields of form
}
При отправке формы вы отправляете данные в свой метод контроллера. Если метод имеет атрибут ValidateAntiForgeryToken
, он проверяет, имеет ли отправленный вами файл ForgeryToken.
[ValidateAntiForgeryToken]
public ViewResult Update()
{
}
ForgeryToken генерируется один раз за сеанс.
Ответ 2
Много информации об 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. У этого есть дубликат.