VoxelGod
@VoxelGod
Настройка шаблонов WordPress

Для чего существует $_REQUEST?

Привет. Разбирался в PHP и увидел следующие утверждения:
Массив $_REQUEST - это объединение массивов $_GET, $_POST и $_COOKIE
Если вы не знаете, каким методом передано значение, используйте $_REQUEST [username]


Сразу возникает вопрос - "Для чего тогда нам нужны $_GET и $_POST, если информацию всегда можно получить средством $_REQUEST?"

Заранее спасибо за ответы!
  • Вопрос задан
  • 10552 просмотра
Решения вопроса 2
Stalker_RED
@Stalker_RED
Для начала, для чего существует POST.
Представим, что у вас есть сайт example.com и на нем форма с кнопкой, удаляющаяя статью.
На сервере вы, естественно, проверяете авторизован ли пользователь и есть ли у него права на удаление.

При нажатии на кнопку через post передаются такие параметры
article_id: 123
action: delete

Если на сервере вы будете получать эти данные при помощи $_REQUEST, то возможна ситуация, когда злоумышленник делает так:
<img src="http://example.com?action=delete&article_id=1">
<img src="http://example.com?action=delete&article_id=2">
<img src="http://example.com?action=delete&article_id=3">
<img src="http://example.com?action=delete&article_id=4">

Публикует такие "картинки" вот прямо здесь, в комментариях на тостере.
При этом ваш браузер конечно попытается эти картинки получить, и выполнит эти запросы с ВАШИМИ правами.

В случае, если вы обращаетесь к $_POST - такой фокус не сработает. Кроме того, данные отправленные через POST не попадут в историю браузера и в логи той wi-fi точки или роутера, через которую вы сидите. URL попадет, а POST data - нет. В отличие от GET.

А $_REQUEST существует для удобства. К примеру у вас есть форма поиска, которая может работать и через POST и через GET. Это удобно, когда пользователь может скопировать URL с поисковым запросом.
Ответ написан
Комментировать
Denormalization
@Denormalization
$_REQUEST небезопасен, так как мы не знаем какие методом были переданны данные.
Во многих случаях нам необходимо знать каким методом были переданны данные, и проверять этот момент.
$_REQUEST просто дает удобный доступ к данным запроса, когда нам все равно как данные передаются.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
POST/GET нужны как раз таки что бы узнать как были переданы эти данные. А REQUEST - когда нам пофигу.

В целом рекомендую никогда не использовать все эти вещи и вооружиться HttpKernel или PSR7
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы