Для чего существует $_REQUEST?
Для начала, для чего существует 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 с поисковым запросом.
$_REQUEST небезопасен, так как мы не знаем какие методом были переданны данные.
Во многих случаях нам необходимо знать каким методом были переданны данные, и проверять этот момент.
$_REQUEST просто дает удобный доступ к данным запроса, когда нам все равно как данные передаются.