php自带strip_tags函数,可以过滤掉html标签,保留所需标签,但此功能有不足,就是不能过滤掉保留下来的标签的属性,这给xxs漏洞创造了机会,如何处理呢?我写了一段二次过滤标签属性的php bbcode函数:
function BBcode($str, $marks = null) {
if ($marks === null) {
global $BBCODEMARKS;
global $SET_BBCODEMARKS;
if ($SET_BBCODEMARKS) {
$marks = $SET_BBCODEMARKS;
} else {
$marks = $BBCODEMARKS;
}
}
$str = strip_tags($str, $marks);
//$htmljsmarks = explode(',', $HTMLJSMARKS);
$str1len = $str2len = 0;
if (preg_match_all('/\/', $str, $match)) {
//print_r($match);
foreach ($match as $value) {
foreach ($value as $value2) {
//print_r($value2);
$value2 = htmlspecialchars(strtolower($value2));
$str1len += strlen($value2);
$str2len += strlen(preg_replace('/on([a-z]+)=/', '', $value2));
}
if ($str1len != $str2len) {
$str = htmlspecialchars($str);
break;
}
}
}
//echo $str1len . " " . $str2len . "
";
return $str;
}
此段函数是从puyuetianPHP开发框架中提出来的,可以过滤掉保留下来的html标签的不合法内容,将其直接转化为html纯文本形式。
此文章为原创文章,转载请注明出处及作者:有天轻论坛(http://www.hadsky.com) & 作者:蒲乐天