标签归档:XSS

Yii中在线编辑器接收用户输入内容,如何防御XSS攻击

//xss攻击演示代码
$str = '<img src="http://www.baidu.com/img/bdlogo.png" width="180" onload="window.location=\'http://www.baidu.com\'">';
//echo $str; //页面自动跳转到baidu.com

$p = new CHtmlPurifier();
$str = $p->purify($str);
echo $str; //已是安全代码

单独使用
require_once __DIR__ . ‘/HTMLPurifier.standalone.php’;

$html = ‘test‘;

$config = HTMLPurifier_Config::createDefault();

//HTMLPurifier的配置文档主要是两级分类:
//大类分Attr(属性)、HTML(html标签)、AutoFormat(自动格式)、CSS(css配置)、Output(输出配置)
//小类选择通过大类名称加.加小类名称可以完成

//过滤掉所有html标签很简单,原因则在白名单机制完成
$config->set(‘HTML.Allowed’, ”);

//配置允许的html标签
$config->set(‘HTML.Allowed’, ‘p,a,b,span’);

//保留超链接标签a及其href链接地址属性
$config->set(‘HTML.Allowed’, ‘a[href]’);

//并自动添加target属性值为’_blank’
$config->set(‘HTML.TargetBlank’, true);

// 让文本自动添加段落标签,前提是必须允许P标签的使用
//$config->set(‘HTML.Allowed’, ‘p’);
//$config->set(‘AutoFormat.AutoParagraph’, true);

//$config->set(‘HTML.Allowed’, ‘p,a,b,span’);

// 清除空标签
$config->set(‘AutoFormat.RemoveEmpty’, true);
$purifier = new HTMLPurifier($config);
$html = $purifier->purify($html);
echo htmlspecialchars($html);