Что такое хороший метод для очистки всего массива $ _POST в php? - PullRequest
32 голосов
/ 05 сентября 2010

У меня есть форма с большим количеством переменных, которая затем отправляет электронное письмо, а не очищает каждое значение $_POST с помощью filter_var($_POST['var'], FILTER_SANITIZE_STRING); Я был за более простым фрагментом кода.Я придумал следующее, которое, кажется, работает, поскольку я считаю, что действие по умолчанию - FILTER_SANITIZE_STRING, но мне просто было интересно, каково мнение людей, и если это не хорошая практика, возможно, вы могли бы сказать мне, почему?Значения $_POST затем индивидуально внедряются в новые переменные, поэтому я бы использовал array_map только для начала, чтобы очистить все ...

$_POST = array_map('filter_var', $_POST);

Спасибо за ваши ответы, чтобы дать вам немногобольше информации, в основном:

У меня есть 20-30 полей ввода в форме, которые собираются, затем данные отображаются пользователю для проверки их ввода, переменные затем очищаются, пользователю затем отправляетсяэлектронная почта, а затем, наконец, детали вводятся в БД.

В настоящее время я выполняю санитарную обработку, используя вышеуказанную функцию array_map, а также FILTER_SANITIZE_EMAIL на адресе электронной почты перед отправкой электронного письма, а затем экранирую ввод с помощью mysql_real_escape_string () перед вставкой в ​​базу данных.Не вдаваясь в подготовленные заявления и т. Д. Как вы думаете, я должен делать что-то дополнительно?еще раз спасибо!

Ответы [ 4 ]

72 голосов
/ 22 августа 2011

Если тип каждой из ваших входных переменных - строка, и вы хотите очистить их все сразу, вы можете использовать:

// prevent XSS
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

Это очистит ваши массивы $ _GET и $ _POST.

Видно здесь: PHP -Санитизировать значения массива

19 голосов
/ 05 сентября 2010

Зависит от того, для чего он используется.

Если вы вставляете его в базу данных, тогда mysql_real_escape_string() для строк в кавычках и приведение типов к числам - это хорошо.идеально подготовленные заявления, но это совсем другое дело.

Если вы планируете выводить данные на веб-страницу, я бы рекомендовал что-то вроде htmlspecialchars()

Если вы планируете использовать пользовательский ввод в качестве аргумента оболочки,тогда вы будете использовать escapeshellarg()

Переходя к вашему вопросу об отправке электронных писем.Ну, должно хватить следующего:

filter_var($_POST['message'], FILTER_SANITIZE_STRING);

Все, что в основном это делает - это обрезать теги и кодировать специальные символы.

5 голосов
/ 05 сентября 2010

Нет правильного способа сделать общую санитарию. Какой метод санитарии вам нужен, зависит от того, что делается с данными.

Санируйте данные непосредственно перед их использованием.

2 голосов
/ 12 июля 2017

Это то, что я использую во всех своих проектах:

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;
}

Это позволяет обрезать и дезинфицировать вложенный массив опубликованных данных

...