【发布时间】:2011-10-30 17:45:29
【问题描述】:
我今天修改了我网站的安全过滤器。我曾经过滤输入并且对输出不做任何事情。
这里是:
所有用户输入的变量都会根据类型通过这两个函数:
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 的攻击...
你怎么看?有什么明显的错误吗?够好吗?
【问题讨论】:
-
重复是什么意思?如果我在重新编码函数之前使用相同的方式过滤输入。
-
可能重复我的意思是您问题的部分上下文已被另一个问题所涵盖。在我看来,您的问题是您想学习如何进行正确的编码,但是它看起来与多个内容域混合在一起,因此我建议了一个与主题具有相同问题的重复问题。例如,您是
mysql_real_escape_string,但它与任何 mysql 无关。