2009-04-20 4 views
19

Это должно быть элементарный вопрос, но почему лучше использовать что-то вроде этого:Почему лучше использовать filter_input()?

$pwd = filter_input(INPUT_POST, 'pwd'); 

Вместо того, чтобы просто:

$pwd = $_POST['pwd']; 

PS: Я понимаю, что расширение фильтр может использоваться с большим количеством аргументов для обеспечения дополнительного уровня санитарии.

+1

вопрос имеет больше голосов, чем принято отвечать. Интересно ... – sMaN

ответ

13

Это не так. $_GET, $_POST, $_COOKIE и $_REQUEST: filtered with default filter. filter_input(INPUT_POST, 'pwd') без дополнительных параметров также использует фильтр по умолчанию. Так что нет никакой разницы.

+0

Оглядывался на 'filter_input' и' htmlspecialchars' и заметил, что это устарело. Большинство конфигураций PHP больше не фильтруют эти данные, ссылка, которую вы публикуете, даже имеет значение конфигурации по умолчанию, установленное как «unsafe_raw» – cspray

+3

@Charles: в обоих случаях данные проходят через фильтр по умолчанию. По умолчанию это «unsafe_raw» ' , но это не меняет того факта, что использование 'filter_input' без параметра' filter' не дает вам какого-либо дополнительного уровня безопасности. – vartec

+0

Достаточно справедливо. Спасибо за информацию. – cspray

2

Любые данные, которые отправляются клиентом (например, данные POST), должны быть дезинфицированы и экранированы (и даже лучше, проверены на работоспособность), чтобы гарантировать, что он не собирается убивать ваш сайт.

SQL Injection и Cross-site scripting являются двумя крупнейшими угрозами для отказа от санитарной обработки ваших данных, отправленных пользователем.

+0

Требуется ли filter_input(), если вы используете параметризованные запросы и htmlspecialchars(), прежде чем печатать какие-либо данные, предоставленные пользователем? – Calvin

+0

filter_input (INPUT_POST, 'pwd'); (без каких-либо других аргументов все еще санирует значение? –

+1

@Ben: обычно вы правы, но это не ответ на этот вопрос. – vartec

2

Это не лучше.

Пожалуйста, смотрите документацию на filter_input http://www.php.net//manual/en/function.filter-input.php

и нажмите кнопку "Типы фильтров" ссылку. http://www.php.net/manual/en/filter.filters.php

я только когда-либо использовал целый фильтр ...

$user_id = filter_input(INPUT_POST, 'user_id', FILTER_SANITIZE_NUMBER_INT); 
$user = abs($user_id); // To get rid of any +/- 

 Смежные вопросы

  • Нет связанных вопросов^_^