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 vs Client-XSS Chart.jpg

 

 

推荐的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

 

转载于:https://www.cnblogs.com/lightsong/p/4300466.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DynamipsGUI下CISCO SDM的安装配置

本人刚开始自学CCNA,在教材里有许多SDM内容,但是手头又没有CISCO路由器,只能借助于模拟器。一开始用的是SDM的DEMO版本,虽然也进去了,但是有很多功能没法使用,只能起熟悉作用,于是就想找一个更好…

CImage类的用法(转帖)

From: http://elevenguy.blog.163.com/blog/static/616122092010053550593/ 我们知道,Visual C的CBitmap类和静态图片控件的功能是比较弱的,它只能显示出在资源中的图标、位图、光标以及图元文件的内容,而不像VB中的Image控件可 以显示出绝大…

Windows SDK笔记(三):定制控件消息处理函数

From: http://www.vckbase.com/document/viewdoc/?id1009 一、概述 控件的消息处理函数是由系统定义好了的,通常情况下,不需要自己提供。 但当需要对控件进行特殊控制时,可以提供一个消息处理函数,替换原来的消息处理函数。 自…

python tip

Python代码 def run(name,age,sex): print name :,name,age:,age,sex:,sex >>> run(xiaoming,namexiaoming,sexboy) SyntaxError: non-keyword arg after keyword arg def run(name,age,sex): print name :,name,age:,age,sex:,sex >>> run…

博客园开始对X++语言语法高亮的支持

关注X的博客园博友有福啦,现在发布X代码也同样可以实现语法高亮。目前仅支持SyntaxHighlighter插件。请看如下: public void update(boolean _updateParty true, boolean _updateContactPersonLastEdit true) {Address addressOrig this.orig();ttsbe…

win10网卡高级属性配置图解_简单设置,win10再也不会断网了

你多朋友反应win10会频繁断网,无任何规律。这也是导致很多人反感win10的原因之一。我百度了一下这个问题,解决问题的方法基本上都是关闭省电模式,重装网卡驱动之类的答案。但都解决不了根本问题。虽然不清楚深层次的断网原因,但通…

为子控件添加自定义绘图方式

在MFC应用程序中,有时会遇到需要让指定的控件实现自绘。但是看该控件的事件,没有一个像是能承担这种责任的。 我们都知道控件也是窗口,也都有消息循环。所以: 方案一:写个新类,继承自某个窗口类&#xff…

根据父类id查询所有的父级_父类子类抽象类,super final 重写方法,搞懂继承中复杂的知识点...

继承继承(Inheritance)可以实现类之间共享属性和方法,是面向对象编程的另一个特性使用继承可以最大限度地实现代码复用。定义:继承就是在已有类的基础上构建新的类,一个类继承已有类后,可以对被继承类中的属性和方法进行重用。继承…

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写...

实验十八:SDRAM模块① — 单字读写 笔者与SDRAM有段不短的孽缘,它作为冤魂日夜不断纠缠笔者。笔者尝试过许多方法将其退散,不过屡试屡败的笔者,最终心情像橘子一样橙。《整合篇》之际,笔者曾经大战几回儿,不…

gateway请求拦截_一种网关对用户请求进行统一拦截判断是否放行的方法与流程...

本发明涉及互联网技术领域,特别涉及一种网关对用户请求进行统一拦截判断是否放行的方法。背景技术:随着互联网发展的越来越快,技术也更新的非常频繁,比如开发一个系统的架构由最初始的单个服务器就能处理演变到现在的利用springcl…

spark sql 上个月_Spark学习之路 (十八)SparkSQL简单使用

一、SparkSQL的进化之路1.0以前:Shark1.1.x开始:SparkSQL(只是测试性的) SQL1.3.x:SparkSQL(正式版本)Dataframe1.5.x:SparkSQL 钨丝计划1.6.x:SparkSQLDataFrameDataSet(测试版本)x:SparkSQLDataFrameDataSet(正式版本)SparkSQL:还有其他的…

GetClientRect相当于GetWindowRect和ScreenToClient区别

From: http://www.cnblogs.com/yongtaiyu/archive/2011/05/18/2049554.html GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。 GetClientRect取得窗口客户区(…