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