В PHP 5.2 была добавлена хорошая функция безопасности под названием "input_filter", поэтому вместо того, чтобы говорить:
$name = $_GET['name'];
Теперь вы можете сказать:
$name = filter_input (INPUT_GET, 'name', FILTER_SANITIZE_STRING);
и он автоматически дезинфицирует вашу строку, также есть:
FILTER_SANITIZE_ENCODED
FILTER_SANITIZE_NUMBER_INT
FILTER_SANITIZE_EMAIL
FILTER_SANITIZE_URL
и т.д..
так что это очень удобная функция безопасности, и я хочу полностью переключиться на нее.
Проблема в том, что ... Я часто манипулирую массивами $ _GET и $ _POST перед их обработкой, например:
$ _ GET ['name'] = '(имя по умолчанию)';
но похоже, что filter_input не имеет доступа к изменениям в $ _GET, так как он читает «INPUT_GET», который имеет тип int (?). Было бы хорошо, если бы я мог заставить filter_input читать $ _GET вместо этого, но:
$name = filter_input ( $_GET, 'name', FILTER_SANITIZE_STRING );
выдает ошибку:
Warning: filter_input() expects parameter 1 to be long, array given.
Может кто-нибудь придумать, как я мог бы:
- манипулирует источником
INPUT_GET
(где бы он ни был), чтобы я мог изменить его значения, прежде чем filter_input сможет их прочитать
- получить filter_input для чтения
$_GET
ADDENDUM:
<Ч />
Рич спросил: «В любом случае, почему вы изменяете массивы, конечно, вы хотите, чтобы они были входными данными, а не чем-то, что вы программно вставили».
Это просто очень удобное место для предварительной обработки входящих переменных, например, для того, чтобы:
- установить значения по умолчанию (если $ _GET ['state'] = '', то $ _GET ['state'] = 'AL')
- выполнить ручную обработку (удалить все пробелы и т. Д.)
- безопасность (некоторые из них будут выполнены filter_input сейчас)
Тогда я знаю, что когда я получу входящую переменную, она будет безопасной и действительной. Конечно, я мог бы скопировать массив $ _GET в другой массив и обработать массив THAT, но это просто ненужный шаг, поскольку I $ _GET уже является работающим массивом, поэтому имеет смысл делать это с этими уже существующими системными массивами.