xss总结记录
认识XSS
最近工作小组上,集中精力提高安全意识。而XSS作为全端安全中最常见的问题之一,我们也做了着重的学习。
XSS
全称跨站脚本(Cross Site Scripting)攻击,看起来缩写应该是CSS
,但是CSS
已经普遍指层叠样式表(Cascading Style Sheets),所以呼作XSS
。
跨站脚本攻击是一种常见的WEB安全漏洞,它指攻击者可以在页面中注入恶意脚本,可被浏览器解析执行,当受害者打开被攻击的页面时,达到窃取用户信息、传播、钓鱼等的效果。
XSS的生成
XSS的生成,通常依赖于一个注入点,指的是攻击者可控内容的提交位置。 日常最常接触到的就是输入框了,任何人都可以在输入框中输入任意内容,然后提交。
但是,还有很多我们平常没有留意到,可能会被使用的注入点:
1、GET 请求参数
2、POST请求参数
3、UA
4、Referer
5、URI
...
一切可以提交数据到页面的点都称作向量
XSS
漏洞的产生,都是基于对非预期输入的信任。
开发者对用户输入的数据保持了信任态度,无条件或者预防不足地显示了用户输入的内容,就有可能发生安全问题。
XSS分类
最常见的XSS
分类
- 反射型
- 存储型
- DOM型
反射型
反射型XSS也叫非持久型XSS,最常见在搜索框中(或者是构造在网站的某个GET参数的值中)。 比如:
http://example.xss.com/search.php?word="><script>alert(1)</script>
如果模拟一个搜索页,假设搜索页如下构造
/**
* 很多搜索页会在搜索框显示搜索值
*/
<input type="search" value="<?php echo $_GET['word'] ?>"/>
对于上面的网址,就会输出html如下
<input type="search" value=""><script>alert(1)</script>"/>
一句script就生成了。 这就是反射型XSS,通过提交内容,但是不经过数据库存储,直接反射显示在页面上。
存储型
存储型XSS也叫持久型XSS,意思是输入值会经过存储,以后每次访问该页面(或者是使用到该输入的某些页面),都会触发XSS
。
比较常见的就是论坛回复、发帖
- 输入内容 -> 存入数据库
- 任意用户访问 -> 从数据库取出
- 发生攻击
DOM型
其实DOM型也属于反射型的一种,不过比较特殊,所以一般也当做一种单独类型。
如我上图的那个动图,就是DOM型。
即不经过后端渲染,直接由js操作引发的XSS
。
其他类型的XSS
以下XSS涉及内容比较大,需要针对特定环境,没有经过系统学习。
- mXSS 突变型XSS
- UXSS 通用型XSS
- Flash XSS
- UTF-7 XSS
- MHTML XSS
- CSS XSS
- VBScript XSS
XSS防御
一般来说,XSS防御就是不信任任何用户数据的数据。 《给开发者的终极XSS防御备忘录》
下面是提供一个XSS游戏
最后,非常感谢我厂youzuzhang
的文章,带我生动认识了XSS,本文基本沿袭其思路。
- 常见的Web实时消息交互方式和SignalR
- 【设计模式】——工厂方法FactoryMethod
- 前端翻译:Activating Browser Modes with Doctype
- JS魔法堂:doctype我们应该了解的基础知识
- CentOS6.5菜鸟之旅:安装Realtek无线网卡驱动
- CentOS6.5菜鸟之旅:U盘安装CentOS64位
- 人工智能创造新型态工作 制造业受冲击
- ASP.NET Core File Providers
- JS魔法堂之实战:纯前端的图片预览
- 域名publica.com近50万交易 买家身份浮出水面
- Vim杂记:Sublime的配色方案
- Vim杂记:markdown插件
- 【手把手教你全文检索】Apache Lucene初探
- 微信小程序的“小游戏” 是什么?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法