• XSS 原理


    XSS 原理

    跨站脚本(Cross-Site Scripting)是针对 web 应用程序的漏洞。拥有 XSS 漏洞的 WEB 应用业务流程为:

    • 【 P 】:用户发送给网站一些数据 P
    • 【 R = P + X 】:服务器接收 P ,并拼接响应信息 R = P + X
    • 【 R 】:浏览器接收响应信息,并执行 R

    在正常使用中,也许业务没有问题。但用户发送的 P 中含有可被浏览器执行的数据时,便出现了问题。

    假设有 用户 A,用户 B。他们进行了以下操作:

    • 【 P 】:用户 B 构建了可执行的数据 P ,并发送给用户 A
    • 【 P 】:用户 A 将 P 发送给网站
    • 【 R = P + X 】:服务器接收 P ,并拼接响应信息 R = P + X
    • 【 R 】:用户 A 的浏览器接收响应信息,并执行 R

    这时用户 A 的浏览器便执行了 用户 B 书写的代码。如果代码含有恶意操作,用户 A 将因为网站漏洞付出代价。

    XSS 的分类

    XSS 在利用时,也有多种不同的方式。它们被分为:

    • 反射型
    • 存储型
    • DOM 型

    反射型 XSS

    这个便是最为经典的 XSS。它的流程基本与原理一致:

    • 【 url = D + P 】:攻击者构造一个 url = D + P 链接。D 为正常 url,P 就是可执行代码。
    • 【 url 】:正常用户使用这个 url 访问服务器。
    • 【 R = P + X 】:服务器接收到 url 中的 P ,并构造响应信息 R = P + X
    • 【 R 】:正常用户的浏览器接收响应信息,执行 R

    存储型 XSS

    这类 XSS 的危害远比反射型要大。因为可执行代码被存储进服务器,任何访问服务器的用户都将执行 XSS 代码。

    • 【 S = D + P 】:攻击者将代码 P ,上传服务器的一个页面中。
    • 【 url 】:其他用户访问这个页面。
    • 【 S = D + P 】:服务器将存储的 S 作为响应信息返回。
    • 【 S 】:用户浏览器执行 S。

    DOM 型 XSS

    DOM 型最大的特点是可执行代码没有经过服务器,因此一旦出现,难以防御。

    • 【 url = D + P 】:攻击者构建 url = http://192.168.64.2/dom_xss.html#alert(1) 其中 P=#alert(1)
    • 【 url = D 】:用户使用 url 访问服务器,浏览器会真正发送的 url = D。同时 P 被浏览器保存备用
    • 【 R 】:服务器返回页面 R
    • 【 R 执行 P 】:浏览器利用返回的页面 R 执行 P

    可以看出这是很特殊的状态,用户提交的 url 没有完整的交给服务器。以至于恶意代码逃过服务器的检测。

    同时页面中含有以下代码运行 url 中的脚本:

    <script>
    	eval(location.hash.substr(1));
    </script>
    
    location.hash 将返回 url 中的 #alert(1)
    substr(1) 则是用来去掉第一个井号
    
  • 相关阅读:
    Spring学习笔记之四----基于Annotation的Spring AOP编程
    Spring学习笔记之三----基于Annotation的Spring IOC配置
    Spring学习笔记之一----基于XML的Spring IOC配置
    Spring学习笔记之二----基于XML的Spring AOP配置
    Swift语言之类型方法
    Swift语言之命令模式(Command Pattern)实现
    用Swift语言做App开发之单元测试
    Spring Batch学习笔记三:JobRepository
    Spring Batch学习笔记二
    初探Spring Batch
  • 原文地址:https://www.cnblogs.com/shiwai/p/14170533.html
Copyright © 2020-2023  润新知