Я переглянув кілька публікацій групи новин на PHP Internals та знайшов цікаву дискусію з цієї теми. Початкова тема була про щось інше, але зауваження Стефана Ессера, експерта з безпеки (якщо не цього ) у світі PHP, перетворило дискусію на наслідки для безпеки використання $ _REQUEST для кількох дописів.
Посилаючись на Стефана Ессера в PHP Internals
$ _REQUEST - одна з найбільших недоліків дизайну в PHP. Кожна програма, що використовує $ _REQUEST, найімовірніше, є вразливою до проблем із підпискою підписки на веб-сайті. (Це в основному означає, якщо наприклад, файл cookie з назвою (вік) існує, він завжди буде перезаписувати вміст GET / POST, і тому будуть виконуватися небажані запити)
і в наступній відповіді на ту саму нитку
Справа не в тому, що хтось може підробляти GET, POST; Змінні COOKIE Йдеться про те, що COOKIE замінять дані GET і POST у запиті.
Тому я міг заразити ваш веб-переглядач файлом cookie, в якому написано, наприклад, action = вихід, і з цього дня ви більше не зможете використовувати програму, оскільки ЗАПИТАННЯ [дія] буде виходити назавжди (поки ви вручну не видалите файл cookie).
А заразити вас COOKIE так просто ...
а) Я можу використовувати XSS vuln у будь-якій програмі піддомену
b) Коли б ви намагалися встановити cookie для * .co.uk або * .co.kr, коли ви володієте Єдиний домен там?
в) Інші міждоменні способи ...
І якщо ви вважаєте, що це не проблема, то я можу вам сказати, що існує проста можливість встановити cookie fe. * .Co.kr, що призводить до того, що кілька версій PHP просто повертають білі сторінки. Уявіть: лише один cookie, щоб знищити всі сторінки PHP у * .co.kr
І встановивши незаконне ідентифікатор сеансу у файлі cookie, дійсному для * .co.kr, у змінній під назвою + PHPSESSID = незаконний, ви все одно можете досипати кожен PHP-додаток у Кореї за допомогою PHP-сеансів ...
Обговорення триває ще кілька публікацій і цікаве для читання.
Як бачите, головна проблема з $ _REQUEST полягає не стільки в тому, що він має дані з $ _GET і $ _POST, а також з $ _COOKIE. Деякі інші хлопці зі списку запропонували змінити порядок заповнення $ _REQUEST, наприклад, спочатку заповнити його $ _COOKIE, але це може призвести до численних інших потенційних проблем, наприклад, при роботі з сеансом .
Ви можете повністю опустити $ _COOKIES з глобального $ _REQUEST, щоб він не був перезаписаний жодним з інших масивів (насправді ви можете обмежити його будь-якою комбінацією стандартного вмісту, як, наприклад, керівництво PHP про налаштування змінної порядку ini говорить нам:
varia_order Встановлює порядок розбору змінної EGPCS (Середовище, Get, Post, Cookie та Server). Наприклад, якщо для змінних_порядок встановлено значення "SP", PHP створить суперглобали $ _SERVER і $ _POST, але не створить $ _ENV, $ _GET і $ _COOKIE. Якщо встановити "", значить, суперглобали не будуть встановлені.
Але знову ж таки, ви також можете не використовувати $ _REQUEST взагалі, просто тому, що в PHP ви можете отримати доступ до середовища, Get, Post, Cookie та Server у власних глобальних мережах і мати на один вектор нападу менше. Вам все одно доведеться санітувати ці дані, але це турбується про одну меншу річ.
Тепер ви можете задатися питанням, чому все-таки існує $ _REQUEST і чому він не видаляється. Про це запитували і в PHP Internals. Посилаючись на Расмуса Лердорфа про те, чому існує $ _REQUEST? на внутрішній PHP
Чим більше таких матеріалів ми видаляємо, тим важче стає людям швидше переходити на новіші, швидші та безпечніші версії PHP. Це спричиняє більше розчарування для всіх, ніж кілька "потворних" спадкових функцій. Якщо є гідні технічні причини, продуктивність чи безпека, то нам потрібно уважно поставитися до цього. У цьому випадку ми повинні дивитись, чи не слід видаляти $ _REQUEST, а чи слід видаляти з нього дані cookie. Багато конфігурацій вже роблять це, включаючи всі мої власні, і є вагома вагома причина безпеки для невключення файлів cookie у $ _REQUEST. Більшість людей використовують $ _REQUEST, щоб позначати GET або POST, не розуміючи, що він також може містити файли cookie, і тому такі погані хлопці потенційно можуть робити певні трюки з ін'єкцією файлів cookie та порушувати наївні програми.
У будь-якому випадку, сподіваємось, що пролити трохи світла.