什么是XSS
XSS(Cross Site Scripting):跨站式脚本攻击,为防止和CSS混淆简称为XSS,简单来说就是攻击者在用户的浏览器张执行恶意脚本的脚本注入式攻击.对于用户浏览器来说并不能识别出恶意的脚本,当用户去访问该网站时恶意脚本被执行,便造成了许多安全问题.
看一个最简单的例子来理解XSS攻击
在页面上的输入框中进行如下操作
点击提交
XSS出现最主要的原因
Web应用未对用户提交请求的数据做充分的检查过滤,允许用户在提交的数据中掺入HTML代码(最主要的是“>”、“<”), 并将未经转义的恶意代码输出到第三方用户的浏览器解释执行,是导致XSS漏洞的产生原因。
XSS可能导致的安全性问题:
- 泄露用户的账号,密码等隐私数据
- 操作企业敏感数据
- 非法转账
- 挂入木马网站
- 强制发送电子邮件
- 操控用户又向其他网站发起攻击
XSS的分类
-
反射型XSS
将脚本代码加入URL地址的请求参数里,请求参数进入程序后在页面直接输出,用户点击类似的恶意链接就可能受到攻击。
-
存储型XSS
主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等。
应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。
这个流程简单可以描述为:恶意用户的Html输入Web程序->进入数据库->Web程序->用户浏览器。
预防XSS的七条原则
-
原则1:不要在页面中插入任何不可信数据
-
原则2:在将不可信数据插入到HTML标签之间时,对这些数据进行HTML Entity编码
有几个特别注意需要编码的
& –> &
< –> <
> –> >
” –> "
‘ –> '
/ –> /
-
原则3:在将不可信数据插入到HTML属性里时,对这些数据进行HTML属性编码
-
原则4:在将不可信数据插入到SCRIPT里时,对这些数据进行SCRIPT编码
-
原则5:在将不可信数据插入到Style属性里时,对这些数据进行CSS编码
-
原则6:在将不可信数据插入到HTML URL里时,对这些数据进行URL编码
-
原则7:使用富文本时,使用XSS规则引擎进行编码过滤