Cross-Site Scripting(XSS)的类型
本文源自:
https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting
在原文理解上翻译为中文。
背景
本文描述多种不同类型的XSS攻击,和它们之间的相互关系。
最早,有两种类型的XSS攻击被定义,Stored 和 Reflected , 在二零零五年,Amit Klein定义了第三种攻击类型, DOM Based XSS攻击。
Stored 类型
见上一篇文章中的定义。 此外, 由于HTML5的降临, 和其它的浏览器技术, 攻击者的有效荷载可以持久地存储在受害者的浏览器中,例如HTML5数据库, 其不用被发送到服务器端。
Reflected 类型
见上一篇文章中的定义。
DOM Based类型
恶意数据流从源头到渗透,从未离开过浏览器, 例如源头可以是URL,或者是HTML元素。渗透是一些敏感的JS调用, 例如document.write。
XSS的类型
若干年来, 很多人认为三种XSS攻击类型是不同的,实际上三种攻击类型是可以重叠的。 一个攻击可能是 Stored DOM Based XSS。这样造成概念很容易混淆,社区在二零一二年推荐使用新的术语,组织XSS攻击的分类:
1 Server XSS
2 Client XSS
Server XSS
Server XSS产生当不可信的用户提交数据被包含在服务器产生的响应中, 数据源可以来自请求, 也可以是来自存储位置。
因此, 会有两种叠加的XSS攻击:
Stored Server XSS
Reflected Server XSS
这种情况, 整个缺陷都在服务器端代码中,浏览器仅仅简单渲染服务器响应,并执行有效的内嵌脚本。
Client XSS
Client XSS发生当不可信的用户提交数据被用来更新DOM, 使用不安全的JS接口。
JS接口是不安全的, 如果其会引入有效的JS代码到DOM中。
数据源头可以来自DOM, 或者来自服务器端发送(via an AJAX call, or a page load), 最终的来源可以来自请求, 或者来自服务器或者客户端的存储位置。
因此有两种重叠的攻击类型:Reflected Client XSS and Stored Client XSS
有了新的定义, DOM Based 类型的定义不变。DOM Based XSS仅仅是Client XSS的一个子集, 它的数据源头来自DOM的某处, 而不是来自服务器端。
考虑到 Server XSS and Client XSS 都可以是 Stored or Reflected 类型的, 新的术语产生了一个简单明了的 二乘二 矩阵, 一个轴是 Client & Server, 另外一个轴是 Stored and Reflected,如下图
推荐的Server XSS防御方法
Server XSS是由HTML中包含了不可信的数据导致。大多数情况下, 也是最早的最强大的防御方法是
- Context-sensitive server side output encoding (服务器端转码)
怎样执行转码,在如此链接中有详细描述 OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet
输入校验 或者 数据清洗 也可以帮助预防此类攻击, 但是此法困难更加多很多, 比输出转码方法。
推荐的Client XSS预防方法
Client XSS攻击发生,由于不信任的数据被用来更新DOM,使用非安全的JS接口。
最早最强壮的防御方法:
Using safe JavaScript APIs(使用安全的JS接口)
但是,开发者往往不知道哪些接口是安全的,哪些不是,更不用说那些JS库的接口是安全的,哪些不是。
一些接口安全信息见 Unraveling some of the Mysteries around DOM Based XSS
如果你知道有个JS接口是不安全的,建议你使用安全的JS接口代替,如果不能代替, 在传送不信任的数据到JS接口前,
需要将数据执行浏览器端的转码。
OWASP指南关于如何实施转码工作见 DOM based XSS Prevention Cheat Sheet
此指南的适用性对所有类型的XSS攻击, 与数据实际从哪里来无关(Server DOM)。
References
[1] “DOM Based Cross Site Scripting or XSS of the Third Kind” (WASC writeup), Amit Klein, July 2005
http://www.webappsec.org/projects/articles/071105.shtml
Related OWASP Articles
- Cross-site Scripting (XSS)
- Stored XSS (AKA Persistent or Type I XSS)
- Reflected XSS (AKA Non-Persistent or Type II XSS)
- DOM Based XSS
- XSS (Cross Site Scripting) Prevention Cheat Sheet
- DOM based XSS Prevention Cheat Sheet
Cross-Site Scripting(XSS)的类型的更多相关文章
- WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时 ...
- 跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...
- 跨站脚本攻击(Cross‐Site Scripting (XSS))实践
作者发现博客园在首页显示摘要时未做html标签的过滤,致使摘要中的html代码可以被执行,从而可以注入任何想要被执行的js代码,作者利用这一缺陷在本文摘要中插入了一段js代码执行alert弹窗,同时增 ...
- XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)
本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sh ...
- Web安全之XSS(Cross Site Scripting)深入理解
XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...
- XSS 跨站脚本攻击(Cross Site Scripting)
xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意 ...
- 跨站脚本攻击XXS(Cross Site Scripting)修复方案
今天突然发现,网站被主页莫名奇妙的出现了陌生的广告. 通过排查发现是跨站脚本攻击XXS(Cross Site Scripting).以下为解决方案. 漏洞类型: Cross Site Scriptin ...
- Healwire Online Pharmacy 3.0 Cross Site Request Forgery / Cross Site Scripting
Healwire Online Pharmacy version 3.0 suffers from cross site request forgery and cross site scriptin ...
- WordPress Duplicator 0.4.4 Cross Site Scripting
测试方法: 提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! Advisory ID: HTB23162 Product:DuplicatorWordPressPlugin Vend ...
随机推荐
- ACM 图像有用区域
图像有用区域 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 “ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以 ...
- scrollIntoView
DOM的滚动 DOM规范中并没有规定各浏览器需要实现怎样的滚动页面区域,各浏览器实现了相应的方法,可以使用不同的方式控制页面区域的滚动.这些方法作为HTMLElement类型的扩展存在,所以它能在所有 ...
- [深入浅出WP8.1(Runtime)]文本块(TextBlock)
4.3 文本块(TextBlock) 文本块(TextBlock)控件是用于显示少量文本的轻量控件,可以通过TextBlock呈现只读的文本,你可以把TextBlock控件理解为一种纯文本的展示控件. ...
- 学习js正则表达式
function UrlRegEx(url) { //如果加上/g参数,那么只返回$0匹配.也就是说arr.length = 0 var re = /(\w+):\/\/([^\:|\/]+)(\:\ ...
- 【原创】windows下搭建vue开发环境+IIS部署
[原创]win10下搭建vue开发环境 如果要转发,请注明原作者和原产地,谢谢! 特别说明:下面任何命令都是在windows的命令行工具下进行输入,打开命令行工具的快捷方式如下图: 详细的安 ...
- php链接数据库
1:找到 ySQL服务器 $conn = mysql_connect("localhost","","") or die("链 ...
- 数据库存储ATM机,开户、查询等信息
package com.bank.unionpay; //银行卡的接口 public interface I_yinhangka { //抽象方法 //public abstract默认修饰抽象的 p ...
- Linux_系统管理命令(工作中经常使用到的)
查看网络配置信息 ifconfig 查看系统资源信息(类似win系统资源管理器) top (ps: load average 负载 Task 进程 Cpus/Mem swap 交换分区 类似wi ...
- mysql破解root用户密码总结
方法一: 1. /etc/my.cnf 在[mysqld]段中加入 skip-grant-table2. 重启mysql3. 直接mysql登录4. 通过修改权限表方式修改mysql密码(update ...
- 数位DP HDU3652
B-number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...