2013-12-05 3 views
0

Из моих исследований правильный способ защиты от этого - установить NONCE с каждым запросом GET, который возвращает форму, а затем проверить NONCE на запрос POST. Тем не менее, кто-то еще мог написать сценарий, чтобы ПОЛУЧИТЬ мою форму вместе с NONCE, а затем отправить ее обратно с помощью NONCE.

Поскольку это такая широко известная уязвимость, не должны ли браузеры позаботиться об этом, не разрешив междоменные аякс-вызовы? Если нет, у ASP.NET MVC 4 уже есть встроенный механизм для защиты от этого?Должен ли я защищать от подделки запроса на перекрестный домен?

ответ

2

Да, есть встроенный механизм. HtmlHelper.AntiForgeryToken, который может использоваться для защиты вашего приложения от подделки подпроса. Чтобы использовать эту функцию, вызовите метод AntiForgeryToken из формы и добавьте атрибут ValidateAntiForgeryTokenAttribute к методу действия, который вы хотите защитить.

CSHTML файл:

@Html.AntiForgeryToken() 

Контроллер:

[ValidateAntiForgeryToken] 
public ActionResult Edit(User updatedUser) 

Вы заметите, что маркер включает в себя две меры безопасности - поля формы и печенье:

Для сгенерируйте токены анти-XSRF, вызовите метод @ Html.AntiForgeryToken() из представления MVC или @ AntiForgery.GetHtml() из Страница бритвы. Среда выполнения затем выполнить следующие шаги:

  1. Если текущий запрос HTTP, уже содержит анти-XSRF сеанса маркер (анти-XSRF печенья __RequestVerificationToken), маркер безопасности извлекается из него. Если HTTP-запрос не содержит маркер сеанса анти-XSRF или если изъятие маркера безопасности не выполняется, будет создан новый случайный токен анти-XSRF.

  2. Анти-XSRF поле маркер генерируется с использованием маркера защиты со стадии (1) выше, и идентичности текущего вошедшего в систему пользователя.

  3. Если новый маркер анти-XSRF был сгенерирован на стадии (1), новый маркер сеанса будет создан содержать его и будет добавлен к исходящей HTTP кукам сбора. Маркер поля из шага (2) будет обернут в элемент, и эта разметка HTML будет значением значения Html.AntiForgeryToken() или AntiForgery.GetHtml().

Чтение:

XSRF/CSRF Prevention

Wikipedia CSRF

+0

Спасибо за руководство. Тем не менее, на стороне примечания, как NONCE защитит меня, если злоумышленник все еще может заставить браузер сделать запрос GET, получить NONCE, а затем POST-форму с помощью NONCE? – AxiomaticNexus

+0

@ YasmaniLlanes, как вы считаете, что они это делают? Похоже, атакующий сидит на компьютере пользователя. – MikeSmithDev

+0

Они могут служить странице браузера с JavaScript, который делает именно это. – AxiomaticNexus

3

Эти одноразовые номера используются для защиты от подделок перекрестных запросов сайта. Для того, чтобы это произошло, не требуется перекрестный домен ajax-вызов, и браузеры имеют защиту от них. CSRF является уязвимостью, потому что, когда браузер делает звонок на ваш сайт, он отправляет информацию о сеансе для вашего сайта, независимо от страницы, которая сообщила браузеру о вызове.Браузеру может быть предложено сделать запрос на ваш сайт.com, включив тег img на сайте evilsite.com, который указывает на страницу на вашем сайте. Если, когда запрос на получение обрабатывается вашим сайтом, вы проверяете nonce, нет способа, которым диск by evilsite.com мог бы знать о nonce. Аналогичные вещи могут быть сделаны и для почтовых запросов.

Эта страница, кажется, есть некоторая информация о том, как смягчить это в ASP.Net MVC: http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages

Приветствия, Stefan

+0

Запросы GET не должны вызывать беспокойства, поскольку вы никогда не должны выполнять конфиденциальные задачи с помощью запросов GET. Запросы POST - это то, о чем я беспокоюсь. Как бы NONCE защитил меня, если злоумышленник все еще может заставить браузер сделать запрос GET, получить NONCE, а затем POST-форму с помощью NONCE? – AxiomaticNexus

+0

Потому что, когда get выполняется (опять же, как тег изображения или что-то подобное), содержимое страницы на самом деле не доступно вызывающей страницей, поэтому нет никакой возможности для злой страницы попасть в nonce. –

+0

Не, если я делаю запрос GET через тег '', но я могу сделать запрос GET с помощью AJAX и JSONP. – AxiomaticNexus

1

Вы также должны взглянуть на концепцию лица без защиты CSRF. Существует два стандартных подхода к этому: зашифрованный шаблон токена и шаблон Double Submit Cookie. The Encrypted Token Pattern использует заархивированный Rijndael токен, который содержит встроенное значение nonce, которое не может быть прочитано скриптами и является очень сильной криптографической структурой.

+1

Ваш шаблон стал частью [рекомендации OWASP] (https://www.owasp.org/index.php/CSRF_Prevention_Cheat_Sheet), чтобы предотвратить атаки CSRF. – Code4R7