根据网上流行的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,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;
}
$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,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;
}
解决方案 »
- session destroy的问题。
- php做了无限循环,就是smarty 模板里在怎么调用。
- 用正则得到td里的内容有问题
- php连接oracle时出现的问题
- 当$_GET一个不存在的变量时,应该如何设置其默认值呢。
- Call to undefined function bcadd() ??
- 急聘PHP网站开发人员
- ATGrid报表控件/WEB插件[专业版]
- 有没有英文的免费的可以实现以下功能的CMS系统
- 下载的源码文件怎么用要设什么吗?在线等,急
- ~~~~我更改后的DEDE CMS搜索 代码 怎么搜索以后 汉字变成了代码?? 希望大家帮帮找出原因~~~~~~~~~~~~~~~~~~~~~~
- JSON问题!
1.首先这个函数的作用是为了过滤javascript的注入代码
2.<script>alert('fsdafads');</script>比如这段代码,如果提交到服务端执行了,表明存在js注入,所以要把他过滤掉,即转义掉,存入数据库,如果要取出的话再转义回来
3.根据这个函数的二种方式,可知是转义成16进制和10进制实体
4.如<script>alert('fsdafads');</script>
1.转义成十六进制为:<script>alert('fsdafads');</script>
>2.转义成十进制为:
<script>alert('fsdafads');</script>
5.把十六进制和十进制的这二串作为参数传入,再打印就可以看看$str = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $str);
$str = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $str);你说的这十六进制部分的作用总而言之就是一个正则和转义的问题