2013-09-10 2 views
11

Прежде всего я все еще стартер в MVC4, заметив, что многие действия украшены [ValidateAntiForgeryToken], я googled, но все же смущен.Что означает «[ValidateAntiForgeryToken]»?

Может ли кто-нибудь объяснить эту концепцию, используя простейший пример?

ответ

16

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

Как это работает. У вас есть AntiForgeryToken в вашем Html.BeginForm в режиме просмотра.

@using (Html.BeginForm()){ 

@Html.AntiForgeryToken() 

//** fields of form 

} 

При отправке формы вы отправляете данные в свой метод контроллера. Если у метода есть атрибут ValidateAntiForgeryToken, он проверяет, имеет ли данные, которые вы отправляете, ваш ForgeryToken.

[ValidateAntiForgeryToken] 
public ViewResult Update() 
{ 
} 

ForgeryToken генерируется один раз за сеанс.

+1

Спасибо, но в чем же недостаток получения запроса от внешних сайтов? – LifeScript

+1

@LifeScript Thay может создавать любые данные вместо вас. Или измените данные, как пожелаете –

+0

Очень хорошая точка! Спасибо за помощь мне! У вас есть очки! – LifeScript

6

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

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

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

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

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

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

Как генерируется токен? Загрузите source и посмотрите классы AntiForgeryDataSerializer, AntiForgeryData. This has a duplicate.

+0

blog.codeville.net ссылка мертва – BigOmega

Смежные вопросы