CSRF (Cross site request forgery)

Има случаи, в които сървът трябва да знае от къде идва дадената заявка от съображения за сигурност.

Представи си следната примерна ситуация: имаме форма за онлайн плащане в сайта на дадена банка. Две полета и бутон – да въведеш номер на банкова сметка, на която ще се превеждат парите, и поле за сумата, която ще превеждаме.

Даденото действие (в случаят – събмитване на sensitive information) трябва да стане от въпросната страница и форма НА СЪЩИЯТ сърв, или поне, този сърв който приема рекуеста, трябва да знае ОТ КОГО го приема и кой му го подава. Сървът трябва да знае от къде идва рекуестът.

Кой гарантира, че някой няма да направи страница с фалшива форма, която изглежда по същият начин и събмитва към същият адрес, просто полето за номер на сметка на получателят да е hidden поле с номера на банковата сметка на мошениците. Демек, някаква пеймънт система, което приема както кредитната карта на плащащият, така и на получателят, и следователно – да пренасочим плащането към мошеници.

Идеята на тези атаки е най-просто следната: ти си хакер и искаш да изпратиш например пеймънт информация към даден сърв, чрез дадена форма, хостната на него.

Така, всеки платил през тази фалшива форма ще плаща пак през истинската банка но на сметката на мошениците. Демек, банката ще получава три полета – сумата, от кого и на кого. Просто това „на кого“ ще е фалшиво, на мошениците. Но банката няма как да го знае.

За защита от подобни ситуации се добавя едно hidden поле с някакъв хеш, например session_id, който при събмит бива проверяван от сърва дали е правилен. Така отрязваш възможността всеки да събмитва към сърва от всякъде, демек – с подобни фалшиви страници и форми.

Литература

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *