php富文本防注入_HTML Purifier,PHP中过滤富文本&防止XSS攻击

首先引用别人的原话: HTML Purifier:PHP防止xss跨站攻击利器

xss是什么?

(百度到的→)XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。 比如说在博客的新建文章的编辑框里输入 然后保存,以后每次访问这篇文章都会弹提示框出来。

怎么防止?

html purifier的方式的过滤掉 比如编辑框里的文本是1 2 3 ,然后过滤之后,存进数据库的是1 2 3,所以访问文章就不会有提示框弹出啦。

HTML Purfiler怎么用?

官方文档:http://htmlpurifier.org/live/configdoc/plain.html

好啦是全英的,反正我也看不太懂_(:з」∠)_, 就挑一些我会的又比较重要的来说咯

1.首先是使用这个库的基本格式

require_once 'library/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();

//这里配置$config,以下2 3 4点的代码都是插在这里啵

$purifier = new HTMLPurifier($config);

$dirty_html = " 要过滤的字符串";

$clean_Html = $purifier->purify($dirty_html);//过滤后的字符串

2.配置Attr(属性)

$config->set('Attr.EnableID', true); // 允许使用id

$config->set('Attr.IDPrefix', 'test_'); // 给所有id加上前缀test_

$config->set('Attr.AllowedClasses', array('test_by_willko'));// 设置允许使用的class名

$config->set('Attr.ForbiddenClasses', array('ignore'));// 设置拒绝使用的class名

比如:

使用了

$config->set('Attr.EnableID', true); // 允许使用id

$config->set('Attr.IDPrefix', 'test_'); // 给所有id加上前缀test_

↓ h1的id加了前缀了,其他没有id就没有变

74b56c2efd0fbb4f15f450eda4931e32.png

3.配置HTML(html标签)

$config->set('HTML.AllowedElements',array('tr','div','h1'),true);//设置允许的tagname

$config->set('HTML.ForbiddenElements',array('div'),true);//设置拒绝使用的tagname

$config->set('HTML.Allowed','div'); //设置允许的标签名

$config->set('HTML.SafeScripting',array(''));//第二个参数是什么好像结果都是一样的...

比如:

(1)使用了

$config->set('HTML.AllowedElements',array('tr','div','h1'),true);//设置允许的tagname

↓(忽略br,那是我方便查看所以加在前面的)h1和div标签都可以,但p标签被过滤了

2daa6a560b47477282e1702ca7c8415e.png

(2)使用了

$config->set('HTML.SafeScripting',array(''));//第二个参数是什么好像结果都是一样的...

说明一下,第二个参数是什么都会把script的内容显示出来,嗯貌似也有点用的样子...

↓把script文本过滤出来了

80478c2f0e8f58501298bbf8905aff23.png

4.其他 AutoFormat(自动格式)、CSS(css配置)、Output(输出配置)

$config->set('CSS.AllowedProperties',array('width'),true);//设置允许的CSS属性

$config->set('AutoFormat.RemoveEmpty', true);  // 清除空标签

比如:

使用了

$config->set('CSS.AllowedProperties',array('width'),true);//设置允许的CSS属性

↓ style中width能出来,height就被过滤了

6e5d7e54c80b4bccc921e9251c7ac474.png

PS:官方有很多不同的配置,可以去官方文档里面深扒,我这里只列举一些重要的(并且我会的_(:з」∠)_),还望大神指点...

总代码块:

require_once 'library/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();

//$config->set('Attr.EnableID', true); // 允许使用id

//$config->set('Attr.IDPrefix', 'test_'); // 给所有id加上前缀test_

//$config->set('Attr.AllowedClasses', array('test_by_willko'));// 设置允许使用的class名

//$config->set('Attr.ForbiddenClasses', array('ignore'));// 设置拒绝使用的class名

//$config->set('HTML.AllowedElements',array('tr','div','h1'),true);//设置允许的tagname

//$config->set('HTML.ForbiddenElements',array('div'),true);//设置拒绝使用的tagname

//$config->set('HTML.Allowed','div'); //设置允许的标签名

//$config->set('HTML.SafeScripting',array(''));//第二个参数是什么好像结果都是一样的...

//$config->set('CSS.AllowedProperties',array('width'),true);//设置允许的CSS属性

//$config->set('AutoFormat.RemoveEmpty', true); // 清除空标签

$purifier = new HTMLPurifier($config);

$dirty_html = "

123

321

";

$clean_Html = $purifier->purify($dirty_html);

echo "处理前
";

echo $dirty_html;

echo "处理后
";

echo $clean_Html;

?>

主页:http://htmlpurifier.org/

参考:http://blog.csdn.net/hanzengyi/article/details/43019479

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值