小迪Web自用笔记52

XSS跨站

这个漏洞是要引诱用户点击的。

浏览器js执行机制,会执行载入页面的js代码。

这玩意我在看其他课程的时候听说过,就是搞个透明网站钓鱼你的信息,你打开的是这个网站,但实际上跳转的是另一个网站,另一个网站就是我的钓鱼网站。

反射型顾名思义就是利用浏览器接受js的机制,来执行恶意代码(因为原本只是把内容显示在网页上,但是传了恶意代码之后却不是如此。)

这玩意是你自己构造出来的,但是你得诱导别人访问这个东西,有点偏向于社工。

存储型(顾名思义就是被数据库存储的地方):

假设我在名字之中写入了恶意的弹窗代码,由于这个东西已经存入了数据库中,而每当别人再次访问这个页面的时候,浏览器就会自动加载,导致别人每进入一次这个鬼页面(存有我恶意代码的页面)就会弹窗一下。

我感觉这个漏洞是访问这个页面的人越多危害越大。

还有就是可以套管理员的信息,比如给客服给站长提交建议什么的,你搞一个恶意代码,然后就可以套他的信息了,盗取cookie。

Dom操作:

你网址上的信息一旦发生更改就会跳转过去。

这个功能取的是你浏览器上的值。

取表单里面的值进行数据操作,取URL里面的值进行功能上的操作。

是的,你这个判断基本正确,这是功能实现代码里的逻辑漏洞,属于 DOM XSS 漏洞的一种典型场景。

  1. 为什么说是"功能点的漏洞"?
  • 功能本身没问题:你要做的是"通过 URL 跳转到其他网站",这个功能是合理的。

  • 漏洞出在实现方式:问题不在功能设计,而在代码逻辑对用户输入( location.hash )的处理不安全,导致攻击者可以构造恶意 URL 执行脚本。

这种情况也可以理解为功能点的安全缺陷------功能存在,但实现代码有漏洞。

  1. DOM XSS 的本质
  • 不是"注入源代码":传统 XSS 是把恶意代码注入到服务器返回的 HTML 里,而 DOM XSS 是直接在客户端通过 JS 操作 DOM 触发的。

  • 核心是"用户输入被当作代码执行":你的代码把 location.hash 直接当作 URL 跳转,而 javascript: 伪协议允许在 URL 里写脚本,这就相当于把用户输入当作代码执行了。

  1. 如何修复?
  • 过滤输入:只允许合法的 URL 格式(比如以 http:// 或 https:// 开头)。

  • 示例修复代码:

javascript

var hash = location.hash;

if (hash) {

var url = hash.substring(1);

// 只允许 http/https 开头的 URL

if (url.startsWith('http://') || url.startsWith('https://')) {

location.href = url;

} else {

// 非法 URL,跳转到默认页面

location.href = '/';

}

}

  1. 总结
  • 你的代码问题属于 DOM XSS 漏洞,是功能实现代码的逻辑缺陷。

  • 修复的关键是对用户可控的输入进行严格验证和过滤,而不是直接使用。

按照我的理解,就是功能点的漏洞。

直接写代码是有问题的,因为它接收的时候写到了标签里面,得闭合。

利用错误信息弹窗,闭合。

例子:

了解漏洞的本质输入与输出

他是接收数据包,然后显示给我们看。

如果不能成功,你就看是不是有符号闭合干扰。

这个XSs得要用户自定义。

闭合:让前后符号进行1对1的关系,就很像那个注入。

因为它这个东西会存入后面的日志,所以可以载入。

这应该是属于重定向跳转的漏洞吧,解析后面的地址代码并跳转。不过他首先应该是会在页面中解析。

DOM漏洞并非仅属于重定向跳转漏洞,重定向只是其常见表现之一,核心是客户端对DOM(文档对象模型)操作时,未过滤用户可控输入导致的安全风险。

  • 本质差异:DOM漏洞是纯客户端漏洞,根源是JavaScript操作DOM树时,直接使用/拼接用户可控数据(如URL参数、输入框内容),未做安全过滤,导致恶意代码执行或非预期行为。

  • 常见场景:除了你说的"解析地址并跳转"(如通过 window.location.href 拼接恶意URL实现跳转),更典型的是DOM-based XSS(跨站脚本),比如将用户输入直接插入页面DOM(如 document.write ),触发恶意脚本执行,而非单纯跳转。

  • 解析特点:你提到的"先在页面中解析"是准确的------DOM漏洞的触发完全在浏览器端,不依赖服务器解析,仅由客户端JS处理DOM数据时的逻辑缺陷导致。

所以它俩最大的区别就是一个经过服务器,一个不经过服务器js中执行。

这个是通过拼接session里面的东西,来完成的XSS。

是的,这段代码展示了一个通过拼接 session 数据实现 DOM 型 XSS的典型场景,核心风险点在于:

  1. 漏洞本质

代码中 s_session 对象的 seqId 属性值为:

javascript

seqId: " - alert(1) - "

如果这段代码是客户端 JavaScript的一部分(比如嵌入在页面中或通过 script 标签加载),并且 s_session 中的数据来自不可信来源(如 URL 参数、 localStorage 、用户输入等),同时被直接用于 DOM 操作(如 innerHTML 、 document.write ),就会触发 XSS。

  1. 攻击链路分析

假设代码执行流程如下(常见场景):

javascript

// 1. 不可信数据来源(示例:从 URL 参数读取)

const userInput = new URLSearchParams(location.search).get('seqId');

// 2. 拼接进 session 数据(此处模拟代码,实际可能由服务器返回或客户端生成)

const s_session = {

logId: "3091716699",

seqId: userInput, // 攻击者构造的 payload:" - alert(1) - "

debug: false

};

// 3. 危险 DOM 操作(直接将 session 数据插入页面)

document.getElementById('seqId').innerHTML = s_session.seqId;

此时, alert(1) 会被浏览器当作 JavaScript 代码执行,触发弹窗。

  1. 关键风险点
  • 数据来源不可信: s_session 中的 seqId 可能来自用户可控的输入(如 URL 参数、表单、 localStorage 等),攻击者可注入恶意代码。

  • DOM 操作无过滤:直接使用 innerHTML 、 document.write 等危险 API 插入不可信数据,未进行 HTML 转义或 XSS 过滤。

  1. 修复建议
  • 输入过滤:对 s_session 中不可信数据使用 XSS 过滤库(如 DOMPurify)净化:

javascript

import DOMPurify from 'dompurify';

const safeSeqId = DOMPurify.sanitize(s_session.seqId);

  • 安全渲染:优先使用 textContent (仅渲染文本,不解析 HTML)替代 innerHTML :

javascript

document.getElementById('seqId').textContent = s_session.seqId;

总结

这段代码的风险在于将不可信数据(如用户输入)拼接进 session 后,直接用于 DOM 操作,属于典型的 DOM 型 XSS 漏洞。修复需在客户端 JavaScript 中对不可信数据进行过滤,并使用安全的 DOM 操作 API。

相关推荐
牢七11 小时前
小迪web自动笔记50
web app
牢七1 天前
小迪web自用笔记49
web app
牢七1 天前
小迪web自用笔记48
web app
牢七2 天前
小迪web自用笔记47
web app
牢七3 天前
小迪web自用笔记44
web app
合作小小程序员小小店3 天前
web开发,在线%校园,论坛,社交管理%系统,基于html,css,python,django,mysql
数据库·后端·mysql·django·web app
合作小小程序员小小店6 天前
web开发,在线%车辆管理%系统,基于Idea,html,css,vue,java,springboot,mysql
java·spring boot·vscode·html5·web app
宠友信息7 天前
类似小红书垂直社区APP小程序源码
java·开发语言·微信小程序·小程序·uni-app·开源·web app
牢七7 天前
小迪web自用笔记40
web app