У меня есть форма с большим количеством переменных, которые затем отправляют электронное письмо, а не дезинфицируют каждое значение $_POST
с помощью filter_var($_POST['var'], FILTER_SANITIZE_STRING);
Я был после более простой части кода. Я придумал ниже, что, похоже, работает, поскольку я считаю, что действие по умолчанию – FILTER_SANITIZE_STRING
, но мне просто интересно, что такое мнения людей, и если это не хорошая практика, возможно, вы могли бы мне объяснить, почему? Значения $_POST
затем индивидуально внедряются в новые переменные, поэтому я бы использовал массив array_map только в начале, чтобы дезинфицировать все …
$_POST = array_map('filter_var', $_POST);
Спасибо за ваши ответы, чтобы дать вам немного больше информации, в основном:
У меня есть 20-30 полей ввода в форме, которые записываются, данные затем отображаются пользователю для проверки их ввода, затем переменные подвергаются дезинфекции, затем пользователю отправляется электронное письмо, а затем, наконец, детали вводятся в db ,
в настоящее время я дезинфицирую использующ вышеуказанную функцию array_map, а также FILTER_SANITIZE_EMAIL на адресе электронной почты перед отправкой электронной почты, а затем избегая ввода с помощью mysql_real_escape_string () перед вставкой в db. Не вдаваясь в подготовленные заявления и т. Д., Как вы думаете, я должен делать что-нибудь дополнительно? еще раз спасибо!
Если тип каждой из ваших входных переменных является строкой, и вы хотите дезинформировать их все сразу, вы можете использовать:
// prevent XSS $_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING); $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
Это будет дезинфицировать ваши массивы $ _GET и $ _POST.
Видно здесь: PHP -Sanitize значения массива
Зависит от того, для чего он используется.
Если вы вставляете его в базу данных, то mysql_real_escape_string()
для цитируемых строк и типа casting для чисел будет способом перехода – хорошо идеально подготовленные утверждения, но это совершенно другое дело.
Если вы планируете выводить данные на веб-страницу, я бы рекомендовал что-то вроде htmlspecialchars()
Если вы планируете использовать пользовательский ввод в качестве аргумента оболочки, вы должны использовать escapeshellarg()
Перейдем к вашему вопросу о отправке писем. Ну, должно быть достаточно:
filter_var($_POST['message'], FILTER_SANITIZE_STRING);
Все это делает в основном стрип-теги и кодирует специальные символы.
Не существует правильного способа делать полноценную санитарию. Какой метод санитарии вам нужен, зависит от того, что делается с данными.
Санируйте данные непосредственно перед их использованием.
Это то, что я использую во всех своих проектах:
function util_array_trim(array &$array, $filter = false) { array_walk_recursive($array, function (&$value) use ($filter) { $value = trim($value); if ($filter) { $value = filter_var($value, FILTER_SANITIZE_STRING); } }); return $array; }
Это позволяет обрезать и дезинфицировать вложенный массив опубликованных данных