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版本,虽然也进去了,但是有很多功能没法使用,只能起熟悉作用,于是就想找一个更好…

原生js实现tab选项卡切换

原生js实现tab选项卡切换

CImage类的用法(转帖)

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

java 头尾 队列_Java数据结构之队列(动力节点Java学院整理)

队列的定义:队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。(1)允许删除的一端称为队头(Front)。(2)允许插入的一端称为队尾(Rear)。(3)当队列中没有元素时称为空队列。(4)队列亦称作先进先出(First In First Out)的线性表&a…

ListT please check srcIndex

这种错误的原因&#xff0c;是因为List<T>不是线程安全的。 转载于:https://www.cnblogs.com/chucklu/p/4303873.html

vue 实现点击“增加“”按钮,添加一个HTML元素

vue 实现点击“增加“”按钮&#xff0c;添加一个HTML元素

期待flash三剑客

flash cs5 flash catalyst flash builder

pythonlocust使用方法_使用python的locust库进行性能测试

Locust(俗称 蝗虫), 一个轻量级的开源压测工具&#xff0c;用Python编写。安装pip3 install locustPython编写性能测试脚本import jsonfrom locust import HttpLocust, TaskSet, task"""创建后台管理站点压测类&#xff0c;需要继承TaskSet可以添加多个测试任务…

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

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

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…

js实现使用drag实现元素拖拽排序

js实现使用drag实现元素拖拽排序

.NET Core 和 .NET Framework 之间的关系

引用一段描述&#xff1a;Understanding the relationship between .NET Core and the .NET Framework。 .NET Core and the .NET Framework have (for the most part) a subset-superset relationship. .NET Core is named "Core" since it contains the core featu…

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

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

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

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

css 绘制带尖角的矩形

css 绘制带尖角的矩形