首页 > 代码库 > XSS攻击与防范

XSS攻击与防范

1.什么是XSS攻击

XSS攻击,跨站脚本攻击

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

xss攻击,就是给form表单的项目里边填写一些html、css、js等脚本代码,这些代码就会被收集到数据库里边,当对应的内容展示的时候,这些脚本代码,就会执行,造成攻击效果

一般收集form表单信息,要做“表单验证”工作,而该工作可以完全杜绝xss产生。

理想情况下:每个form表单都实现表单验证工作

现实情况是:只有少量form表单适合做验证,其他大量form表单不适合做验证

为什么呢,form表单做验证会影响用户使用体验,另一个会增加程序员开发、维护程序的难度

xss攻击效果:

技术分享
 

首先,在GoodsController.class.php控制器里边要收集$_POST原生数据信息:

添加商品,进行xss攻击

技术分享
 

后期每次查看商品列表,都会有xss攻击效果:

技术分享
 

2.防范XSS攻击

2.1 普通表单域

① 在普通的form表单中 通过htmlspecialchars()函数收集处理数据

② 在tp框架的form表单中 通过I()函数或create()方法收集处理数据

它们的关系如下:

create()—>>—I()—>>—htmlspecialchars()

以上函数会把脚本攻击内容中的<>箭头符号都变为符号实体,进而杜绝xss攻击

2.2 富文本编辑器

1) 在编辑器中正常写入xss攻击内容

ueditor本身并没有那么笨,其会防止xss攻击的,因此无需多虑

 

技术分享
 

攻击失败,效果如下:

技术分享
 

通过变形方式设置攻击

形成攻击步骤:

① 正常设置富文本编辑器内容

② 点击“HTML源代码标签”

③ 在 源代码 框里边设置xss攻击内容

④ 再点击 “HTML源代码标签”切换回正常的状态

之后信息保存会形成攻击

技术分享
 
技术分享
 

富文本编辑器xss攻击防范处理手段:

① 把“HTML源代码”标签给去除[不推荐]

② htmlpurifier防止xss攻击

技术分享
 

2.3 htmlpurifier防范xss攻击

htmlpurifier是在htmlspeciachars()不能使用情况下的另一个解决方案

该htmlpurifier可以限制被处理的内容中是否可以出现某些脚本(html标签、css、js)内容或不出现某些脚本

htmlpurifier会把xss攻击的非法内容直接删除

htmlspeciachars则是把脚本标签的”<>箭头符号”变为符号实体

① 引入功能包到项目中

解压关键的功能包目录出来

技术分享
 
技术分享
 

② 形成过滤函数

系统函数库文件:

ThinkPHP/Common/functions.php 系统函数库文件

Application/Common/Common/function.php 项目函数库文件(所有分组都可以使用)

Application/分组(Home或Admin)/Common/function.php 项目中具体某个分组的函数库文件

tp框架中,一个php文件需要引入另一个php文件

我们通常设置相对路径引入文件,在任何一个php文件里边引入其他php文件都是相对入口文件index.php设置的

在Application/Common/Common/function.php文件中制作htmlpurifier过滤函数:

技术分享
 

③ xss攻击的防范效果

在控制器中对收集的信息实现htmlpurifier处理:

技术分享
 

htmlpurifier防止xss攻击效果:

技术分享
 

数据库收集的信息没有看到xss攻击内容:

技术分享
 

XSS攻击与防范