MVC 4 - -

Подправяне на заявки между сайтове (XSRF) е атака, при която сайтът на нападателя представя на потребителя формуляр, който при подаване изпраща заявка до уязвимо приложение. Уязвимото приложение обработва заявката нормално, тъй като най-често измаменият потребител остава удостоверен за уязвимия сайт.

В тази ситуация уязвимият сайт няма начин да разбере дали подадената заявка е дошла от самия него, което е нормално поведение, или от сайт на трета страна. Проблемът с ASP.NET MVC е как да предоставите етикет за защитен сайт, който той може да използва, за да гарантира, че заявките се генерират само от страниците, които той контролира.

XSRF в действие

Включихме работеща демонстрация на XSRF в примерния код за тази глава. Отново в решението има два сайта: уязвимия и нападателя. Уязвимият сайт приема просто подаване на формуляри.

Представете си сигурните искания, които изпращате през целия ден - прехвърляне на средства между банкови сметки, покупка или продажба на ценни книжа, увеличаване на кредита и т.н. Може да е от полза за хакера да формулира специална заявка от ваше име и вие несъзнателно ще я предадете на сайта, който посещавате.

Нашият атакуващ сайт е показан на Фигура 8-7. Този бутон просто моли за щракване.

Зад кулисите, в недрата на HTML източника, се разказва съвсем различна история, както е показано в Листинг 8-1.

Линия един: Изпращане на формуляра на друг сайт

Когато потребителят щракне върху бутона, формулярът се изпраща. Сега дори AuthorizeAttribute не може да ни спаси, вече сме влезли в системата! Резултатът е показан на Фигура 8-8.

Предотвратяване на XSRF

Прилагането на ValidateAntiForgeryTokenAttribute към действие изисква входът да бъде придружен от специален маркер, който гарантира, че той идва само от отговарящото приложение. Атрибутът трябва да бъде последван от специален HTML помощен метод, който извежда маркера във формата във HTML източника.

Следният код показва атрибут, приложен към нашето уязвимо действие:

Според нас можем да използваме помощния метод AntiForgeryToken:

Когато маркерът и атрибутът са зададени, данните, изпратени от сайта, който има както маркера, така и атрибута, ще бъдат приети, но нападателите няма да могат да формулират XSRF атаки. Ако се опитат, ще бъде хвърлено изключение, както е показано на фигура 8-9.