我实施了这个清理修复:
function san($str, $type="full") {
switch ($type) {
case "full":
$str = preg_replace("/[^a-zA-Z0-9_\-]/i", "", $str);
break;
case "mid":
$str = preg_replace("/</i", ">", $str);
$str = preg_replace("/>/i", "<", $str);
break;
case "low":
if ($str == "true" || $str == true)
$str = true;
else
$str = false;
break;
}
我想睡个安稳觉,但我不是安全专家。什么可以通过那个过滤器?我知道如何使用正则表达式,但是可以编码str
绕过这个功能吗?
该mid
级别旨在防止 XSS 和full
命令注入级别,例如:
$str = san($_REQUEST['cmd']);
$cmd = "cmd1 foo | cmd2 -arg=". $str;
shell_exec($cmd); // is this secure?