论坛风格切换
  • 4289阅读
  • 0回复

关于html实体绕过敏感词审核的处理 [复制链接]

上一主题 下一主题
离线瓜牛
 

发帖
85
金币
0
威望
3
只看楼主 倒序阅读 使用道具 楼主  发表于: 2012-01-10
— 本帖被 瓜牛 从 二次开发专区 移动到本区(2012-01-10) —
    pw8.7 2011111版本还是没有添加对html实体过滤的代码,在/lib/filter/filterutil.class.php里面是带了两个过滤火星文,和标点的函数(filterChineseCode与filterSymbol)但由于效率问题未被启用。(ps:本来我也不知道有效率问题,指导孝感网开启了那连个函数以后,大于1500字的帖子发不上去才知道)。
     继续刚才html实体字符(ps:一些字符在 HTML 中拥有特殊的含义,比如小于号 “<”要然它显示可以用"& lgt;"表示。但是并非只有特殊字符才可以用html实体,而是latin-1包含的所有字符都可以 )的问题,比如“& #23567;& #22992;”这个词,页面上显示的为"小姐",刚才也说过我们程序是没有对实体进行转换的,这样就可以轻松绕过敏感词流程。。。然后头痛的"小姐"问题就产生了。
    那这样的话算法我们不研究,把实体转换成中文,至少可以挡住和后台设置一样的敏感词吧。我加了一个replaceHtmlChar函数作为转换,具体代码如下
  1. $content = preg_replace('/(\&\#[0-9a-zA-Z]{5,5};)/ie', "replaceHtmlChar('\\1')", $content) ;//实体转换字符
  2. function replaceHtmlChar($char) {
  3.     
  4.     //$char = html_entity_decode($char);
  5.     $convmap = array(0x0, 0x2FFFF, 0, 0xFFFF);
  6.     return mb_decode_numericentity($char, $convmap, 'GB2312');    
  7.     //echo $char;
  8. }

用正则匹配出&#xxxxx的格式加以转换。

至于其他简单的加空格,加长见火星文我也稍微过滤了下。
  1. function replaceChar($content) {
  2. $filterTag = array(' ', ';', ',', '.', '!', '?', ',', '。', '!', '?', ';', '“', '”', '‘', '※','≮', '【', '】', '●', '◆','↖','♂', '♀', '∷', '╓', '☆', '┠', '㊣', '*', '★', '⊙', '-', '——', '{', '}', '(', ')', '+', '_', '=', '&', '~', '$', '%', '^', '<', '>', ' ');
  3. $content = str_replace($filterTag, '', $content);
  4. $content = preg_replace(array("/\s+/"), "", $content);
  5. return $content;
  6. }



这个函数,基本上效果还是有一点的,其余的只能到后台多加敏感词了。。

附上 /lib/filter/filter.class.php 8.7版本直接覆盖即可





描述:/lib/filter/filter.class.php
附件: filterutil.class.rar (7 K) 下载次数:123
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
提到某人:
选择好友
上一个 下一个