Недавно я наткнулся на пару популярных ответов, связанных с PHP, в которых предлагалось использовать суперглобальный $_REQUEST
, который я считаю запахом кода, потому что он напоминает мне register_globals
.
Можете ли вы дать хорошее объяснение / доказательство того, почему $_REQUEST
является плохой практикой? Я приведу пару примеров, которые я выкопал, и мне бы хотелось больше информации / перспективы как о теоретических векторах атак, так и о реальных эксплойтах, а также предложения разумных шагов, которые может предпринять системный администратор для снижения риска (если не считать переписываете приложение ... или нам нужно , чтобы перейти к руководству и настаивать на переписывании?).
Пример уязвимостей: По умолчанию GPC
порядок слияния массивов означает, что значения COOKIE переопределяют GET и POST, поэтому $_REQUEST
можно использовать для атак XSS и HTTP. PHP позволяет файлам cookie перезаписывать суперглобальные массивы. Первые 10 слайдов из этого доклада приводят примеры (весь доклад великолепен). phpMyAdmin эксплойт пример атаки CSRF.
Пример контрмер: Переконфигурировать $_REQUEST
порядок слияния массива от GPC
до CGP
, поэтому GET / POST перезаписывает COOKIE, а не наоборот. Используйте Suhosin , чтобы заблокировать перезапись суперглобальных элементов.
(Кроме того, я бы не спрашивал, думал ли я, что мой вопрос был обманом, но, к счастью, подавляющий SO-ответ на "Когда и почему следует использовать $ _REQUEST вместо $ _GET / $ _POST / $ _COOKIE? " было" Никогда. ")