1.什么叫做xss攻击
xss攻击:跨站脚本攻击(攻击者网web里面插入恶意的script代码,用户浏览的时候script代码就会执行,会恶意攻击用户)
如果我们不放在xss攻击
攻击者在商品名称新增输入框,输入如下的script代码
其他用户在进入商品列表展示页面的时候,就会看见这个弹窗
妨碍用户访问网页
2.防范xss攻击
(1)使用htmlspecialchars函数
将用户输入的特殊字符<>,转化为html实体字符
在application\config.php中设置默认全局过滤方法
尝试着攻击一下插入script代码,此时看你的内容展示页面
内容类似于这个样子,但是它没有弹窗
存入数据表的话,script标签的尖括号会转为实体字符
(2)使用htmlpurifier防范富文本编辑器的xss攻击
在富文本编辑器里输入html代码是正常的,所以使用htmlspecialchars函数是不起作用的
用户在编辑区内写入
-
如果是下载的htmlpurifier插件包将其中的library目录移动到项目中public/plugins目录[也可以利用composer一步加载到位]
-
在application/common.php中定义remove_xss函数
function remove_xss($string){
//composer安装的,不需要此步骤。相对index.php入口文件,引入 HTMLPurifier.auto.php核心文件
require_once ‘./plugins/htmlpurifier/HTMLPurifier.auto.php’;
// 生成配置对象
$cfg = HTMLPurifier_Config::createDefault();
// 以下就是配置:
$cfg -> set(‘Core.Encoding’, ‘UTF-8’);
// 设置允许使用的HTML标签
$cfg -> set(‘HTML.Allowed’,‘div,b,strong,i,em,a[href|title],ul,ol,li,br,p[style],span[style],img[width|height|alt|src]’);
// 设置允许出现的CSS样式属性
$cfg -> set(‘CSS.AllowedProperties’, ‘font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align’);
// 设置a标签上是否允许使用target="_blank"
$cfg -> set(‘HTML.TargetBlank’, TRUE);
// 使用配置生成过滤用的对象
cfg);
// 过滤字符串
return string);
}
}
测试:
然后随便在一个模块的方法里写个字符串调用一下,dump出来
打印出来的结果是一个字符串