当前位置: 首页 > news >正文

XSS学习总结

一.XSS概述


跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者通过在网页上注入恶意脚本代码,从而在用户的浏览器上执行恶意操作。这些脚本可以是 JavaScript、HTML 或其他网页脚本语言。一旦用户在受感染的网页上进行交互,如点击链接或填写表单,恶意脚本就会在用户浏览器上执行,从而导致多种安全问题,包括但不限于:

窃取用户信息:攻击者可以利用 XSS 漏洞窃取用户的敏感信息,如用户会话 cookie、登录凭证等。
会话劫持:通过获取用户的会话信息,攻击者可以冒充合法用户,执行未授权的操作。
网页篡改:攻击者可以修改网页内容,显示虚假信息,诱导用户点击恶意链接或下载恶意文件。
钓鱼攻击:攻击者可以伪装成合法网站或服务,诱骗用户输入敏感信息,如用户名、密码、信用卡信息等。
XSS 漏洞通常出现在没有充分验证用户输入的地方,比如网站的搜索框、评论区、表单提交等。预防 XSS 攻击的方法包括对用户输入进行严格过滤和转义,使用安全的开发框架和编程语言,以及定期对网站进行安全审计和漏洞扫描。

XSS 主要分为反射型 XSS、存储型 XSS 和 DOM 型 XSS 三类。以下是具体分类及例子介绍:

二、XSS分类

  1. 反射型 XSS:攻击者将恶意脚本作为参数嵌入 URL 中,用户访问该 URL 时,服务器将参数直接返回给浏览器,浏览器执行其中的恶意脚本。例如,在一个搜索功能中,正常的搜索 URL 可能是 “https://example.com/search?keyword=苹果”,攻击者构造恶意 URL“https://example.com/search?keyword=<script>alert('XSS')</script>”,当用户点击该链接,搜索结果页面返回时,浏览器会执行脚本弹出警告框,若脚本是窃取 Cookie 等代码,就会导致用户信息泄露。

  2. 存储型 XSS:攻击者将恶意脚本提交到目标服务器的数据库中,当其他用户访问包含该脚本的页面时,脚本会从数据库中取出并在用户浏览器中执行。常见于论坛评论、用户资料等可输入存储内容的模块。比如在论坛中,攻击者发布一条包含恶意脚本的评论,如 “<script>document.cookie=' 恶意操作 ';</script>这是一条恶意评论”,其他用户浏览该论坛页面时,就会触发此脚本,可能导致用户 Cookie 被窃取或执行其他恶意操作。

  3. DOM 型 XSS:攻击者通过修改页面的 DOM 结构来注入恶意脚本,无需与服务器交互,主要利用前端 JavaScript 操作 DOM 时的漏洞。例如,页面中有一段 JavaScript 代码用于根据 URL 参数显示不同内容,代码如下:javascript

var param = window.location.hash.substring(1);
document.getElementById("content").innerHTML = param;

正常情况下,用户访问 “https://example.com/page#hello”,页面会在指定位置显示 “hello”。但攻击者构造 URL“https://example.com/page#<script>alert('XSS')</script>”,浏览器解析页面时,会将 URL 中的哈希值作为内容插入到 DOM 中,从而执行恶意脚本。

 三、XSS漏洞中的Prototype和Object利用


在XSS攻击中,JavaScript的`prototype`和`Object`机制常被攻击者利用来扩大攻击面或绕过防御措施。下面我将详细解释这些概念及其在XSS攻击中的应用。

1. JavaScript原型(Prototype)基础
原型链概念:JavaScript是一种基于原型的语言,每个对象都有一个原型对象,对象从原型继承属性和方法。


// 构造函数
function User(name) {
  this.name = name;
}
 
// 通过prototype添加方法
User.prototype.greet = function() {
  return `Hello, ${this.name}`;
};
 
const user = new User('Alice');
console.log(user.greet()); // 继承自prototype
 

 原型污染(Prototype Pollution):攻击者可以通过修改对象的原型来影响所有基于该原型的实例。
// 恶意代码可以污染Object原型
Object.prototype.isAdmin = true;
 
// 现在所有对象都会继承isAdmin属性
const user = { name: 'Bob' };
console.log(user.isAdmin); // true (即使未显式设置)
AI写代码
2. Object在XSS中的利用
常见利用方式
2.1 污染内置对象原型
// 攻击者可能注入的代码
String.prototype.trim = function() {
  // 恶意代码
  sendDataToAttacker(this);
  return this;
};
 
// 之后所有字符串的trim()都会执行恶意代码
" normal input ".trim();
2.2 覆盖关键方法
 
// 覆盖Array.prototype.push
Array.prototype.push = function(item) {
  // 窃取数据
  exfiltrateData(item);
  // 调用原始实现
  return Array.prototype.push.apply(this, arguments);

http://www.dtcms.com/a/290091.html

相关文章:

  • 【算法笔记】树状数组
  • 学习秒杀系统-异步下单(包含RabbitMQ基础知识)
  • Linux——自制shell命令行解释器
  • CMakeLists.txt 中一些最常见和核心的命令
  • GC9118S低压单通道全桥驱动器芯片详解
  • Effective Modern C++ 条款15:尽可能的使用constexpr
  • 17 BTLO 蓝队靶场 Pretium 解题记录
  • Windows GCC修改链接脚本文件实现section块存储函数
  • LVS 集群技术基础
  • docker--挂载
  • Docker安装Elasticsearch 7.17.0和Kibana 7.17.0并配置基础安全
  • 悬镜安全将受邀参加2025开放原子开源生态大会
  • Curtain e-locker 易锁防泄密:无需网络隔离,实现安全与效率并存
  • 量子生成对抗网络:量子计算与生成模型的融合革命
  • uni-api交互反馈组件(showToast)的用法
  • 宝塔面板Nginx报错: IP+端口可以直接从访问,反向代理之后就504了 Gateway Time-out
  • 农村供水智慧化管理系统:从精准监测到智能调度,破解农村用水安全与效率难题
  • MySQL 事务死锁排查:从日志分析到解决实战
  • 某日在某个月份中不存在导致软件出现异常的问题排查(判断闰年以及月份中的天数,附完整源码)
  • 低代码平台能否完全取代传统前端开发
  • Bun v1.2.19发布,node_modules隔离,sql比node快6倍
  • MySQL:表的增删查改
  • 【跨国数仓迁移最佳实践2】MaxCompute SQL执行引擎对复杂类型处理全面重构,保障客户从BigQuery平滑迁移
  • VUE如何设置语音
  • 【实践篇】基于.venv 的 ComfyUI 环境同配置迁移:pyvenv.cfg 路径修改法
  • leetcode-sql-627变更性别
  • 植物根茎切片图像处理与分析系统开发
  • 【大模型】结构化提示词:让AI高效完成复杂任务的“编程语言”
  • 虚拟机扩展磁盘容量后扩展分区大小
  • 部署 Zabbix 企业级分布式监控