这不起作用。当我在表单中输入html时。例如,当我输入水平规则时,即使$ value通过strip_tags传递,它也会显示在echo输出中。
function sanitizeString($var){
$var = strip_tags($var);
$var = htmlentities($var);
return stripslashes($var);
}
foreach($_POST as $key => $value){
echo $key."<br>";
sanitizeString($value);
echo $value."<br>";
}
答案 0 :(得分:2)
您实际上并没有更改$value
。你丢掉了返回值。试试$value = sanitizeString($value);
。
答案 1 :(得分:0)
你可以尝试
$_POST = array_map(function ($var) {
return stripslashes(htmlentities(strip_tags($var)));
}, $_POST);
foreach ( $_POST as $key => $value ) {
echo "$key = $value <br>";
}
或者更好仍然使用filter_var
$_POST = array_map(function ($var) {
return filter_var($var, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW);
}, $_POST);
差分
$var = "index.php?name=guest<script>alert('attacked')</script>";
var_dump(stripslashes(htmlentities(strip_tags($var))));
var_dump(filter_var($var, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW));
输出
string 'index.php?name=guestalert('attacked')' (length=37)
string 'index.php?name=guestalert('attacked')' (length=45)