根据网上流行的RemoveXSS函数、以及phpcms过滤代码改编;其中十六进制过滤部分不太懂,基本上就是照抄RemoveXSS的代码function RemoveXSS($str) {  
   $str = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $str);  
   
   $search = 'abcdefghijklmnopqrstuvwxyz'; 
   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';  
   $search .= '1234567890!@#$%^&*()'; 
   $search .= '~`";:?+/={}[]-_|\'\\'; 
   
   for ($i = 0; $i < strlen($search); $i++) { 
     $str = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $str);
     $str = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $str);
   } 
   $str = preg_replace('/<script.*?<\/script>|<iframe.*?<\/iframe>|expression[\(][^\;\}]*[\;\}]/is', '', $str);
   $str = addslashes(preg_replace('/<(.*?)>/ise', "'<'.preg_replace(array('/javascript:[^\"\']*/is', '/on.*?[ \\t\\n]*=[ \\t\\n]*[\"\'][^\"\']*[\"\']/is', '/\s+/'), array('', '', ' '), stripslashes('\\1')) . '>'", stripslashes($str)));
   
   return $str;
}  

解决方案 »

  1.   

    我看你已经发了三,四个贴了,之前已经说过了,我再一步步讲,希望把这个贴子结了
    1.首先这个函数的作用是为了过滤javascript的注入代码
    2.<script>alert('fsdafads');</script>比如这段代码,如果提交到服务端执行了,表明存在js注入,所以要把他过滤掉,即转义掉,存入数据库,如果要取出的话再转义回来
    3.根据这个函数的二种方式,可知是转义成16进制和10进制实体
    4.如<script>alert('fsdafads');</script>
    1.转义成十六进制为:&#x03c;&#x073;&#x063;&#x072;&#x069;&#x070;&#x074;&#x03e;&#x061;&#x06c;&#x065;&#x072;&#x074;&#x028;&#x027;&#x066;&#x073;&#x064;&#x061;&#x066;&#x061;&#x064;&#x073;&#x027;&#x029;&#x03b;&#x03c;&#x02f;&#x073;&#x063;&#x072;&#x069;&#x070;&#x074;&#x03e;
    >2.转义成十进制为:
    &#060;&#0115;&#099;&#0114;&#0105;&#0112;&#0116;&#062;&#097;&#0108;&#0101;&#0114;&#0116;&#040;&#039;&#0102;&#0115;&#0100;&#097;&#0102;&#097;&#0100;&#0115;&#039;&#041;&#059;&#060;&#047;&#0115;&#099;&#0114;&#0105;&#0112;&#0116;&#062;
    5.把十六进制和十进制的这二串作为参数传入,再打印就可以看看$str = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $str);
    $str = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $str);你说的这十六进制部分的作用总而言之就是一个正则和转义的问题
      

  2.   

    这种过滤几乎起不到什么作用的。http://ha.ckers.org/xss.htmlhttp://htmlpurifier.org/
      

  3.   

    去看下ci的xss_cleen函数吧.. 研究透彻就行