我今天修改了我网站的安全过滤器。我过去常常过滤输入而不对输出做任何事情。
这是:
所有用户输入的变量都要经过这两个功能,具体取决于类型:
PS:因为我没有从头开始编码,所以我为所有变量做了这些变量,包括那些在查询中没有使用的变量。我知道这是一个性能杀手,并将取消它。对不起比安全更好吗?
// numbers (I expect very large numbers)
function intfix($i)
{
$i = preg_replace('/[^\d]/', '', $i);
if (!strlen($i))
$i = 0;
return $i;
}
// escape non-numbers
function textfix($value) {
$value = mysql_real_escape_string($value);
return $value;
}
XSS阻止:
输入 - 过滤用户提交的文字,例如帖子和消息。如你所见它目前是空的。不确定是否需要strip_tags。
输出 - 在所有html输出上
function input($input){
//$input = strip_tags($input, "");
return $input;
}
function output($bbcode){
$bbcode = textWrap($bbcode); // textwrap breaks long words
$bbcode = htmlentities($bbcode,ENT_QUOTES,"UTF-8");
$bbcode = str_replace("\n", "<br />", $bbcode);
// then some bbcode (removed) and the img tag
$urlmatch = "([a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+)";
$match["img"] = "/\[img\]".$urlmatch."\[\/img\]/is";
$replace["img"] = "<center><img src=\"$1\" class=\"max\" /></center>";
return $bbcode;
}
我包含了img标签,因为它可能容易受到CSS ...
你怎么看?有什么明显的错吗?够好吗?答案 0 :(得分:1)
看起来不错,但您可以轻松地为文本和整数创建一个函数,首先检查其类型,然后对其进行操作。