PHP input sanitizer?
什么是一些好的PHP html(输入)清洁剂?
最好是,如果内置了某些东西 - 我希望我们这样做。
更新:
根据请求,通过注释,输入不应该允许HTML(显然阻止XSS和SQL注入等)。
html净化器 - > http://htmlpurifier.org/
使用
1 | $input_var=sanitize_input($_POST); |
和功能在下面,几乎消毒你需要的东西
1 2 3 4 5 6 7 8 9 10 11 12 13 | function sanitize($var, $santype = 1){ if ($santype == 1) {return strip_tags($var);} if ($santype == 2) {return htmlentities(strip_tags($var),ENT_QUOTES,'UTF-8');} if ($santype == 3) { if (!get_magic_quotes_gpc()) { return addslashes(htmlentities(strip_tags($var),ENT_QUOTES,'UTF-8')); } else { return htmlentities(strip_tags($var),ENT_QUOTES,'UTF-8'); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | function sanitize_input($input,$escape_mysql=false,$sanitize_html=true, $sanitize_special_chars=true,$allowable_tags='<p> ') { unset($input['submit']); //we use 'submit' variable for all of our form $input_array = $input; //array is not referenced when passed into foreach //this is why we create another exact array foreach ($input as $key=>$value) { if(!empty($value)) { $input_array[$key]=strtolower($input_array[$key]); //stripslashes added by magic quotes if(get_magic_quotes_gpc()){$input_array[$key]=sanitize($input_array[$key]);} if($sanitize_html){$input_array[$key] = strip_tags($input_array[$key],$allowable_tags);} if($sanitize_special_chars){$input_array[$key] = htmlspecialchars($input_array[$key]);} if($escape_mysql){$input_array[$key] = mysql_real_escape_string($input_array[$key]);} } } return $input_array; } |
记住:它不会清理多维数组,你需要递归地修改它。
如果你想运行一个使用let说的
1 2 3 4 5 6 7 8 | <?php $user = mysql_real_escape_string($_GET['user']); $SQL ="SELECT * FROM users WHERE username = '$name'"; //run $SQL now ... ?> |
如果要将文本存储在数据库中,然后将其打印在网页上,请考虑使用htmlentities
[编辑]或者像awshepard所说,你可以使用addslashes()和stripslashes()函数[/ Edit]
以下是防止XSS攻击的一个小清理示例:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $str ="A 'quote' is bold"; //Outputs: A 'quote' is bold echo $str; // Outputs: A 'quote' is <b>bold</b> echo htmlentities($str); // Outputs: A 'quote' is <b>bold</b> echo htmlentities($str, ENT_QUOTES); ?> |
我一直使用PHP的addslashes()和stripslashes()函数,但我也看到了内置的filter_var()函数(链接)。 看起来有很多内置的过滤器。