前言
跨站脚本工具Cross-site scripting(XSS)是一种安全漏洞,攻击者可以利用这种漏洞在网站上注入恶意的客户端代码。从而,攻击者可以突破网站的访问权限,冒充受害者。是最为常见的Web应用程序漏洞之一。
容易发生XSS攻击的两种情况:
- 数据从一个不可导的链接进入到一个web应用程序。
- 没有过滤掉恶意代码的动态内容被发送给web用户。
恶意内容一般是JavaScript,但是,有时候也会包括HTML,FLASH。XSS攻击的形式千差万别,但是,它们的共同点为:将一些隐私数据像cookie、session发送给攻击者,将受害者重定向到一个由攻击者控制的网站,在受害者的机器上进行一些恶意操作。
XSS攻击类型
XSS攻击可以分为3类:
- 存储型(持久型)
- 反射型(非持久型)
- 基于DOM
-
存储型XSS:注入脚本永久存储在目标服务器上。当浏览器请求数据时,脚本从服务器上传回并执行。
-
反射型XSS:当用户点击一个恶意链接,或者提交一个表单,或者进入一个恶意网站时,注入脚本进入被攻击者的网站。Web服务器将注入脚本,比如一个错误信息,搜索结果等,返回到用户的浏览器上。浏览器会执行这段脚本,因为,它认为这个响应来自可信任的服务器。
-
基于DOM的XSS被执行的恶意脚本会修改页面脚本结构。
X-XSS-Protection
这个header能在用户浏览器中开启基本的XSS防御。它不能避免一切XSS攻击,但它可以防范基本的XSS。例如,如果浏览器检测到查询字符串中包含类似<script>标签之类的内容,则会阻止这种疑似 XSS 攻击代码的执行。这个 header 可以设置三种不同的值:0、1 和 1; mode=block。如果你想了解更多关于如何选择模式的知识,请查看 X-XSS-Protection 及其潜在危害 一文
防御
如何防御跨站脚本攻击?
- 表单提交时按照预期格式进行数据验证
- 服务端接收数据时验证,渲染时转码
- 尽量减少动态改变DOM结构的操作
- 头部设置HttpOnly Cookie
- 使用WAF(Web Application Firewall)
基于现代框架,可以引入xss组件提供全套XSS相关前端API,
参考文档:
npm install xss --save
针对XSS的防御,必须遵循的准则就是:不要相信用户输入的任何东西,不要将用户输入的数据变为代码执行,从而混淆了原本的语义。要根治xss攻击。需要了解xss所在的不同场景。
-
减少xss危害的方法:
- 添加
httponly属性 - 系统后台增加
ip访问限制。主要针对获取cookie伪造管理员登入方式。