очистка переменных $ _POST

Я пытаюсь придумать способ эффективно очистить все переменные POST и GET с помощью одной функции. Вот сама функция:

//clean the user's input function cleanInput($value, $link = '') { //if the variable is an array, recurse into it if(is_array($value)) { //for each element in the array... foreach($value as $key => $val) { //...clean the content of each variable in the array $value[$key] = cleanInput($val); } //return clean array return $value; } else { return mysql_real_escape_string(strip_tags(trim($value)), $link); } } 

И вот код, который бы назвал это:

 //This stops SQL Injection in POST vars foreach ($_POST as $key => $value) { $_POST[$key] = cleanInput($value, $link); } //This stops SQL Injection in GET vars foreach ($_GET as $key => $value) { $_GET[$key] = cleanInput($value, $link); } 

Мне кажется, что это должно сработать. Но по какой-то причине он не будет возвращать массивы из некоторых флажков, которые у меня есть в форме. Они продолжаются.

Я протестировал свой код без указанной выше функции, и он отлично работает, я просто хочу, чтобы там был добавлен бит безопасности.

Благодаря!

Solutions Collecting From Web of "очистка переменных $ _POST"

То, что вы делаете, недостаточно. См. Здесь .

Используйте filter_input, если это возможно (php5 +). Он держит его намного чище, и насколько им известно, вы можете санировать и проверять все, что вам нужно, чтобы использовать его.

Вы можете использовать фильтр var array и, например, флаг FILTER_SANITIZE_STRING, чтобы отфильтровать весь массив сообщений

 filter_var_array($_POST, FILTER_SANITIZE_STRING) //just an example filter 

В ссылке фильтра w3schools имеется множество различных параметров фильтра

чтобы сделать рекурсию более элегантной, вы можете использовать что-то вроде array_map, например:

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

Используйте фильтр var, если можете, хотя, поскольку такие подходы в целом плохие, просто пример, хотя;)

флажки, отмеченные флажком, не отправляются на сервер.

вы можете использовать array_walk_recursive, чтобы делать то, что вы хотите

Это неправильный способ очистки ввода.

Применять скрытое mysql-экранирование на абсолютно все в $_POST и $_GET будет возвращаться и укусить вас, если вы все еще хотите использовать данные после того, как вы сделали запрос к базе данных, но вам не нужны escape-символы.

Используйте параметризованные запросы с mysqli или PDO, и вам никогда не понадобится использовать mysql_real_escape_string() .