Санитария при вводе пользователя с использованием белого списка

У меня есть этот код, который очищает ввод пользователя от переменной с именем «username»:

$username_clean = preg_replace( "/[^a-zA-Z0-9_]/", "", $_POST['username'] ); if (!strlen($username_clean)){ die("username is blank!"); 

Я хочу выполнить один и тот же процесс на каждом входе на этой странице, но у меня есть около 12 различных входов, так как это зарегистрированная форма. Есть ли более простой способ дезинфекции и проверки каждого входа вместо применения preg_replace () и оператора if на каждом из них?

    Если вы хотите дезинфицировать все элементы в $_POST , вы можете просто создать функцию array_map и применить ее ко всем элементам с помощью array_map :

     $post_clean = array_map("sanitization_function", $_POST); 

    Затем вы получите доступ к своим переменным через $post_clean вместо $_POST .

    Это будет выглядеть примерно так:

     function sanitize($dirty){ return preg_replace( "/[^a-zA-Z0-9_]/", "", $dirty ); } $cPOST = array_map("sanitize", $_POST); if (!strlen($cPOST['username'])){ die("username is blank!"); } 

    Если вы хотите только очистить подмножество элементов $_POST , вы можете сделать что-то вроде:

     $cPOST = array(); $sanitize_keys = array('username','someotherkeytosanitize'); foreach($_POST as $k=>$v) { if(in_array($k, $sanitize_keys)) { $cPOST[$k] = preg_replace( "/[^a-zA-Z0-9_]/", "", $v); } else { $cPOST[$k] = $v; } } 

    Попробуй это:

     $cPOST = array(); $sanitize_keys = array('username','someotherkeytosanitize'); for($_POST as $k=>$v) { if(in_array($k, $sanitize_keys)) { $cPOST[$k] = preg_replace( "/[^a-zA-Z0-9_]/", "", $v); if(strlen($cPOST[$k]) == 0){ die("%s is blank", $k); } } else { $cPOST[$k] = $v; } } # At this point, the variables in $cPOST are the same as $_POST, unless you # specified they be sanitized (by including them in the $sanitize_keys array. # Also, if you get here, you know that the entries $cPOST that correspond # to the keys in $sanitize_keys were not blank after sanitization. 

    Просто не забудьте изменить $ sanitize_keys на массив любых переменных (или ключей $ _POST), которые вы хотите дезинфицировать.

    Если регулярное выражение и проверка на отказ совпадают, вы можете написать функцию:

     function validate($input, $input_name) { $clean_input = preg_replace( "/[^a-zA-Z0-9_]/", "", $input ); if (!strlen($username_clean)){ die("$input_name is blank!"); } return $clean_input; } validate($_POST['username'], "Username");