Массив $_REQUEST содержит в себе данные массивов $_GET, $_POST и $_COOKIE. Это позволяет создавать практически универсальные скрипты, которые поддерживают одновременно все три способа передачи информации по HTTP.
Что же здесь такого плохого из-за чего этот массив не стоит применять? Ведь его использование предоставляет такие возможности и может значительно упростить написание скриптов и облегчить труд программиста.
К сожалению, главный недостаток $_REQUEST является продолжением его главного достоинства. Обращение к элементу $_REQUEST осуществляется только по его имени и никак не связано с тем, каким образом этот элемент в нём оказался.
Для наглядности рассмотрим два простых примера.
В первом из них используется массив $_POST. Поэтому передать значение параметру под именем var можно только, используя POST запрос.
1 2 3 4 5 6 7 8 9 |
<?php if (isset($_POST['var'])) { echo($_POST['var']); } else { echo("В параметре var ничего нет!"); } ?> |
Во втором используется массив $_REQUEST. В этом случае передать значение параметру под именем var можно как с помощью POST или GET запроса, так и с помощью Cookie.
1 2 3 4 5 6 7 8 9 |
<?php if (isset($_REQUEST['var'])) { echo($_REQUEST['var']); } else { echo("В параметре var ничего нет!"); } ?> |
Чтобы сравнить работу обоих примеров передадим каждому из них значение параметра varс помощью адресной строки (GET запрос). В качестве значения параметра зададим цифру «1». Сделаем это следующим образом:
https://localhost/?var=1
В первом случае файл index.php включает в себя код из первого примера, а втором случае соответственно из второго.
Так как значение параметра передаётся посредством GET запроса, то в первом случае код выдаст «В параметре var ничего нет!» потому что значение этого параметра не будет передано сценарию. В этом можно легко убедиться внимательно рассмотрев скриншот:
Во втором случае результат работы кода будет прямо противоположный. В браузер будет выведена цифра «1» (см. скриншот).
С точно таким же успехом можно передать значение параметра с помощью POST запроса или Cookie. Результат будет аналогичный.
На первый взгляд, из негативных последствий использования $_REQUEST, наиболее серьёзным кажется возможность возникновения неразберихи в коде при использовании параметров. Однако это далеко не так.
Подобная неразбериха, безусловно, может сильно осложнить процесс написания и отладки кода, а также увеличить вероятность возникновения различного рода ошибок. В тоже время параметры, которые передаются с использованием GETи POST-запросов и Cookie могут быть связаны с важными аспектами работы не только вновь создаваемого, но и уже готового работающего web приложения. В их числе авторизация, доступ к той или иной информации или возможностям и так далее. Таким образом, возможность передачи web приложению параметров, минуя «официальные» предусмотренные для этого пути представляет собой крайне высокую опасность.
Поэтому, перед тем как использовать в скрипте $_REQUEST следует серьёзно задуматься и трезво оценить, не окажет ли это влияние на безопасность.
Ссылки
$_REQUEST — Переменные HTTP-запроса – Описание $_REQUEST на PHP.RU
Добавить комментарий