Статьи  : 

Безопасность get-запросов

14 сентября 2016, 00:00

В данной статье мы рассмотрим безопасность get-запросов к сайту, то есть тех, что имеют передаваемые параметры прямо в адресной строке.

Предположим, что у вас имеется некоторый скрипт del_user.php, который отвечает за удаление пользователей из базы. Чтобы удалить какого-либо пользователя, нужно сделать вызов: del_user.php?id_user=123 . Разумеется, вы позаботились о проверке прав доступа, поставив в самое начало скрипта условие:

if ( $user_role != 'admin' ) die();


Достаточно ли этого для безопасной работы? К сожалению, нет. Если кто-то посторонний (например, уволенный сотрудник) знает механику запросов, то ему не составит труда сделать вызов с удалением пользователя. Для этого достаточно сделать страницу для заманивания "жертвы", на которой разместить загрузку картинки:

img src="http://victim_site.com/del_user.php?id_user=1"


"Жертвой" в нашем случае будет человек, обладающий правами на удаление пользователей на целевом сайте. Так как у него, скорее всего, будет установлена авторизационная кука, то проверка безопасности пройдет, и он, сам того не подозревая, удалит профиль указанного пользователя. Со всеми вытекающими последствиями.

Вывод из данного кейса довольно прост: критические важные действия в системе не должны выполняться через get-запросы. Правильнее передавать информацию через post, для чего ссылки должны быть заменены на формы с одной единственной кнопкой и скрытыми параметрами. При необходимости кнопку можно стилизовать средствами css, так что она не будет отличима от обычной ссылки.
Если вы хотите получить консультацию по данному вопросу применительно к своему проекту – пожалуйста, свяжитесь с нами через форму обратной связи.