本文源自:

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)的类型的更多相关文章

  1. WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))

    跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时 ...

  2. 跨站脚本攻击(Cross‐Site Scripting (XSS))

    跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...

  3. 跨站脚本攻击(Cross‐Site Scripting (XSS))实践

    作者发现博客园在首页显示摘要时未做html标签的过滤,致使摘要中的html代码可以被执行,从而可以注入任何想要被执行的js代码,作者利用这一缺陷在本文摘要中插入了一段js代码执行alert弹窗,同时增 ...

  4. XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)

    本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sh ...

  5. Web安全之XSS(Cross Site Scripting)深入理解

    XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...

  6. XSS 跨站脚本攻击(Cross Site Scripting)

    xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意 ...

  7. 跨站脚本攻击XXS(Cross Site Scripting)修复方案

    今天突然发现,网站被主页莫名奇妙的出现了陌生的广告. 通过排查发现是跨站脚本攻击XXS(Cross Site Scripting).以下为解决方案. 漏洞类型: Cross Site Scriptin ...

  8. 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 ...

  9. WordPress Duplicator 0.4.4 Cross Site Scripting

    测试方法: 提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! Advisory ID: HTB23162 Product:DuplicatorWordPressPlugin Vend ...

随机推荐

  1. 移动端开发——javascript

    javascript(简称js)语言在移动前端应用很广.可以说必不可少,许多效果都是和js相关的.包括现在移动端的一些框架.jqmobi.jqtouch.sencha touch.jquerymobi ...

  2. 自己收集原生js-2014-2-15

    function testforbtn(event){ alert(window.EventUtil.getEventTarget(window.EventUtil.getEvent( event)) ...

  3. 【BZOJ】2879: [Noi2012]美食节

    题意 \(m\)个厨师,\(n\)种菜,每种菜需要做\(p_i\)份,每个厨师做第\(i\)种菜用时\(t_{i, j}\).一个厨师做完一道菜才能做下一道.每份菜的时间是这个厨师做完这道菜的用时加上 ...

  4. 【CF】438E. The Child and Binary Tree

    http://codeforces.com/contest/438/problem/E 题意:询问每个点权值在 $c_1, c_2, ..., c_m$ 中,总权值和为 $s$ 的二叉树个数.请给出每 ...

  5. CF #371 (Div. 2) C、map标记

    1.CF #371 (Div. 2)   C. Sonya and Queries  map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...

  6. Cento 安装配置FastFDS

    unzip -x libfastcommon-master.zip ./make.sh ./make.sh install /usr/include/fastcommon cd FastDFS ./m ...

  7. JSch - Java实现的SFTP(文件上传详解篇)

    JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...

  8. hdu-acm steps 免费馅饼

    /*dp入门级的题目,和数塔是一样的,这道题不用做什么优化,感觉时间复杂度不会超.主要还是细节上的问题, 这道题的状态和状态方程都容易找到,采用自底向上的方式会好很多*/ #include" ...

  9. SQL server 链接查询

    一.链接查询 1.join  on  左右链接 2.左右查询 left  right 3.union  上下链接

  10. android之进度条组件ProgressBar

    首先是main.xml文件 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android& ...