web安全 - XSS类型

1. 传统分类

  • 反射型XSS (Reflected XSS)
    当web应用在搜索结果,错误消息或其他响应返回用户输入时,就会发生反射型XSS。最常见的做法
    是攻击者利用web应用的xss漏洞,构造一个url,通过邮件短信等方式诱导用户点击,当请求发出后,
    web应用返回url中隐藏的恶意代码,并在用户浏览器中执行,从而发生发射型XSS。

  • 存储型XSS (Stored XSS)
    当web应用未对用户输入进行安全校验时,恶意代码可能会被输入并存储到服务器的数据库,当其他用户
    浏览相关页面时,恶意代码就会从数据库中取出,并发送到用户浏览器中进行执行,从而形成多用户,
    持久性的攻击,从而形成存储型xss。

  • 基于Dom的XSS (Dom Based XSS)
    数据源在Dom中,接收器也在Dom中,数据流不会离开浏览器。数据源可能是页面的URL,也可能是HTML
    的一个元素,最常见的是来自ajax请求返回响应数据。 而接收器则是一个敏感的方法调用, 比如
    Element.innerHTML, document.write, eval等它会导致 执行恶意的数据。

2. 新分类

  • 服务端XSS (Server XSS)
    当恶意代码包含在服务器生成的HTTP响应中时,就会发生服务端XSS。此恶意代码数据可能来自请求,
    也可能来自数据库存储,因此服务端XSS,即可能包含反射型XSS,也可能包含存储型XSS。
    这种情况,整个漏洞都在服务端代码中,浏览器只是响应并执行嵌入其中的任何有效脚本。

  • 客户端XSS (Client XSS)
    当使用不受信任的用户提供的数据通过不安全的javascript调用更新Dom时,就会发生客户端XSS。
    此数据的来源可能来自Dom,也可能是服务器发送的。数据的最终来源可能来自请求,或者来自客户端
    或服务器上的存储位置。因此客户端XSS可能具有反射型XSS,也可能包含存储型XSS。基于Dom的XSS只是
    客户端XSS的一个子集,其数据源来自于Dom中的某个位置而不是服务器。

  • XSS 分类矩阵

XSS 服务端 客户端
存储型 服务端存储型XSS 客户端存储型XSS
反射型 服务端反射型XSS 客户端反射型XSS

3. XSS防御

  • 服务端XSS防御
    服务端XSS是由在HTML响应中包含不受信任的数据引起的,因此在大多数情况下,针对服务端XSS
    最简单和最强的防御是:上下文相关的服务器端输出编码。(HTML实体编码,javascript编码,url编码)

  • 客户端XSS防御
    当使用不受信任的数据通过不安全的javascript调用更新Dom时,会导致客户端XSS。针对客户端XSS最
    简单和最强的防御是:使用安全的javascript API。

    如果某个javascrpt API 是不安全的(eval ), 则建议找到替代的安全方法来使用(JSON.parse).
    如果由于某种原因无法使用安全的替代方法,则可以在浏览器中完成上下文相关的输出编码,然后将
    该数据传递给不安全的javascript 方法。
    参考:https://owasp.org/www-community/Types_of_Cross-Site_Scripting

posted @ 2022-09-08 21:53  箫笛  阅读(207)  评论(0)    收藏  举报