PHP过滤用户发布的信息中的危险代码

作者:enenba | 发表于:2011-12-13 22:08 | 分类:正则表达式

#用户发布的带有html的信息,怎么使用PHP过滤危险代码 以下是php源码

 

<?php
function uh($str) {
  $farr = array(
    "/\s+/",
    "/< (\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%) ([^>]*?)>/isU", 
    "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",    
  );
  $tarr = array(
    " ",
    "<\\1\\2\\3>", 
    "\\1\\2",
  );
  $str = preg_replace( $farr,$tarr,$str);
  return $str;
}
?>

(以下为正则内容,如果您只是想要功能源码可以不用看以下内容)

正则表达式教程:

/\s+/    为过滤多余的空白 \s是空白 也是空格 这句是一个空格以上

/< (\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%) ([^>]*?)>/isU

 过滤 <script 等可能引入恶意内容或恶意改变显示布局的代码,如果不需要插入 flash等,还可以加入<object的过滤

 /(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU

过滤javascript的on事件

 

$tarr数组是 替换后的内容

    "",   对于第1个 正则表达式 多余的空格替换为空(删除空格,这样说才明白)
    "<\\1\\2\\3>",   script 等标签的“<”和“>”符号换成中文的〈和〉。如果要直接清除不安全的标签,这里可以留空
    "\\1\\2",   //过滤javascript的on事件 比如:<a class="abc" onclick=“show()”> 换成 <a class="abc">  ,简单来说是去掉onXXXX的事件

         

上一篇: PHP匹配图片的路径部分   |   下一篇:如何用php正则表达式得到网页上所有的链接» 标签: php源码 正则

评论:

2011-12-28 22:07

不用我说什么

2011-12-25 18:01

<a>伊莱克斯要茜</a>
<div>asfja 柑</div>

2011-12-23 19:32

果然是好文章!!
基本原则

2011-12-23 19:35

我再发

2011-12-27 22:25

123412

2011-12-28 00:03

最后的

2011-12-23 19:30

我要说点什么了