文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>用PHP过滤html危险内容

用PHP过滤html危险内容

时间:2009-08-08  来源:hkebao

在php的网页程序中,我们会经常用到一些可视化编辑器.对于数据库安全,可以使用mysql_real_escape_string()来将字符串转 义.但是填写的内容中有一些不良的html标签可能导致而且变形,严重者可能会现出跨站攻击之类的安全问题.所以带有html的内容中增加过滤恶意的 html代码是很有必要的.

不过google里,如果搜索 "php 过滤 html"
你只会找到以下的类似的函数

function uh($str)
{
  $farr = array(
          "/s+/",//过滤多余的空白
          "/< (/?)(script|i?frame|style|html|body|title|link|meta|?|%)([^>]*?)> /isU",//过滤 <script 等可能引入恶意内容或恶意改变显示布局的代码,如果不需要插入flash等,还可以加入<object的过滤
          "/(<[^>]*)on[a-zA-Z]+s*=([^>]*>)/isU",//过滤javascript的on事件
        );
  $tarr = array(
          " ",
          "\\1\\2\\3",//如果要直接清除不安全的标签,这里可以留空
          "\\1\\2",
        );
  $str = preg_replace( $farr, $tarr, $str);
  return $str;
}

这个函数的路思是正确的,但是有很多问题,例如

<style>
.message{}
</style>

使用上面的函数过滤后,会变成

.message{}

安全是没有问题了.不过页面会多显示了.message{}这样的内容.

<a href="post.php?actions=newthread&fid=10&extra=&special=1">发布投票</a>

过滤后会变成

<a href="po t.php?action =newthread&fid=10&extra=& pecial=1">发布投票</a>

看到这些问题,我不过能使用这样的函数在我的程序里.所以我必须过滤这些内容

function filterHtml($str)
{
  $farr = array(
          "/<!DOCTYPE([^>]*?)>/eis",
          "/<(\/?)(html|body|head|link|meta|base|input)([^>]*?)>/eis",
          "/<(script|i?frame|style|title|form)(.*?)<\/\\1>/eis",
          "/(<[^>]*?\s+)on[a-z]+\s*?=(\"|')([^\\2]*)\\2([^>]*?>)/isU",//过滤javascript的on事件
          "/\s+/",//过滤多余的空白
        );
  $tarr = array(
          "",
          "",
          "",
          "\\1\\4",
          " ",
        );
  $str = preg_replace( $farr,$tarr,$str);
  return $str;
}


显示我这些函数里没有上面提到的问题
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载