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 . "<br>"; return $str; }
此段函数是从puyuetianPHP开发框架中提出来的,可以过滤掉保留下来的html标签的不合法内容,将其直接转化为html纯文本形式。
此文章为原创文章,转载请注明出处及作者:有天轻论坛(http://www.hadsky.com) & 作者:蒲乐天