反射型与dom型的xss的区别【源码分析】

反射型 XSS 和 DOM 型 XSS 都属于跨站脚本攻击 (XSS) 的类型,它们的共同点是均能通过注入恶意脚本在用户浏览器中执行,不同点是dom型xss不经过服务器,而反射型是经过服务器的。但是,它们在攻击方式、执行过程和防御措施上有所不同。以下是两者之间的详细区别:

1. 反射型 XSS(Reflected XSS)

基本原理:

反射型 XSS 的恶意代码通过 HTTP 请求参数发送到服务器,服务器在响应中直接反射回客户端,而不存储在服务器上。恶意脚本立即在受害者的浏览器中执行。

攻击流程:
  1. 注入点:通常在 URL 参数、表单数据等。
  2. 服务器响应:服务器端应用将这些输入值包含在响应中,而没有适当的验证或转义。
  3. 脚本执行:当用户访问恶意链接时,恶意脚本被反射回并在用户的浏览器中执行。
示例:

假设有一个搜索功能,用户输入的搜索关键字会直接显示在搜索结果页面上。

<!DOCTYPE html>
<html>
<head><title>Search</title>
</head>
<body><h1>Search Results</h1><p>You searched for: <?php echo $_GET['query']; ?></p>
</body>
</html>

攻击者可以构造一个恶意 URL:

http://example.com/search.php?query=<script>alert('XSS!')</script>

当用户访问这个 URL 时,服务器会返回以下响应:

<p>You searched for: <script>alert('XSS!')</script></p>

恶意脚本立即在用户浏览器中执行。

防御措施:
  1. 输入验证:对用户输入的数据进行严格的验证和过滤。
  2. 输出编码:对输出到 HTML 上的数据进行适当的编码,以防止脚本注入。
  3. 使用安全的库和框架:利用安全的开发库和框架来处理用户输入。

2. DOM 型 XSS(DOM-based XSS)

基本原理:

DOM 型 XSS 的恶意代码不通过服务器,而是直接在客户端(浏览器)中利用 JavaScript 动态生成和插入到 DOM 中,导致恶意脚本执行。

攻击流程:
  1. 注入点:通常在 URL 参数、location.hashdocument.cookielocalStorage 等。
  2. DOM 操作:客户端 JavaScript 代码读取并处理这些输入,动态地修改 DOM。
  3. 脚本执行:恶意脚本被插入并在用户的浏览器中执行。
示例:

假设有一个网页,通过读取 URL 参数来显示用户的名字:

<!DOCTYPE html>
<html>
<head><title>Welcome</title>
</head>
<body><h1 id="welcome"></h1><script>// 从 URL 参数中读取 namevar params = new URLSearchParams(window.location.search);var name = params.get('name');// 将 name 插入到 DOM 中if (name) {document.getElementById('welcome').innerHTML = 'Welcome, ' + name + '!';}</script>
</body>
</html>

攻击者可以构造一个恶意 URL:

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

当用户访问这个 URL 时,网页的 JavaScript 代码会将 name 参数的值插入到 innerHTML 中,而不进行任何过滤或转义,导致恶意脚本被执行。

防御措施:
  1. 输入验证和过滤:尽量避免直接使用用户输入的数据,对用户输入的数据进行严格验证和过滤。
  2. 安全的 DOM 操作:使用安全的 DOM 操作方法,例如 textContentinnerText,而不是 innerHTML
  3. 内容安全策略(CSP) :配置内容安全策略,限制浏览器执行未授权的脚本。
  4. 避免使用危险的 API:避免使用可能导致安全问题的 API,如 evalsetTimeoutsetInterval,除非完全确保其安全性。

3. 主要区别总结

  • 攻击点

    • 反射型 XSS:恶意代码通过 HTTP 请求发送到服务器,并在服务器响应中反射回客户端。
    • DOM 型 XSS:恶意代码直接在客户端(浏览器)中通过 JavaScript 动态生成和执行。
  • 执行位置

    • 反射型 XSS:服务器响应时执行。
    • DOM 型 XSS:客户端 JavaScript 处理时执行。
  • 防御重点

    • 反射型 XSS:服务器端的输入验证和输出编码。
    • DOM 型 XSS:客户端 JavaScript 的输入验证和安全的 DOM 操作。

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

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

相关文章

【人工智能】AI绘画:科技与艺术交汇的新时代

文章目录 &#x1f34a;AI绘画:开启艺术创作新纪元AI绘画技术发展&#xff1a;算法与艺术的完美交融AI绘画的工作原理与创意生成AI绘画的应用 AI绘画工具介绍 &#x1f34a;AI绘画:开启艺术创作新纪元 人工智能正以前所未有的力量重塑我们的世界&#xff0c;而AI绘画作为这股科…

论文总结:A Survey on Evaluation of Large Language Models-鲁棒性相关内容

A Survey on Evaluation of Large Language Models 只取了鲁棒性相关的内容 LLMs&#xff1a;《A Survey on Evaluation of Large Language Models大型语言模型评估综述》理解智能本质(具备推理能力)、AI评估的重要性(识别当前算法的局限性设 3.2.1 Robustness鲁棒性&#xf…

Flink 技术与应用(一)

Flink技术与应用&#xff08;初级篇&#xff09; 起源 Apache Flink 是一个开源的大数据处理框架&#xff0c;其起源可以追溯到一个名为 Stratosphere 的研究项目&#xff0c;旨在建立下一代大数据分析引擎&#xff0c;2010 年&#xff0c;从 Stratosphere 项目中分化出了 Fl…

【OpenCV C++20 学习笔记】图片处理基础

OpenCV C20 图片处理基础 VS 2022 C20 标准库导入的问题头文件包含以及命名空间声明main函数读取图片读取检查显式图片写入图片 完整代码bug VS 2022 C20 标准库导入的问题 VS还没有完全兼容C20。C20的import语句不一定能正确导入标准库&#xff0c;所以必须要新建一个头文件专…

WebGIS的地图渲染|SVG|Canvas|Canvas

说到地图&#xff0c;平时我们使用过百度地图、高德地图、腾讯地图等&#xff0c;如果涉及地图开发需求&#xff0c;也有很多选择&#xff0c;如前面提到的几个地图都会提供一套JS API&#xff0c;此外也有一些开源地图框架可以使用&#xff0c;如OpenLayers、Leaflet、Mapbox、…

Vue3 study

Vue3 工程 创建 还是能像 vue2 一样通过 vue-cli 创建&#xff0c;即 vue create projectName 但是官方更推荐 vite 创建&#xff0c;即 npm create vuelatest&#xff0c;然后从项目名开始配置 总结&#xff1a;入口在 index.html&#xff0c;它会引入 main.ts&#xff0c;…

开源XDR-SIEM一体化平台 Wazuh (1)基础架构

简介 Wazuh平台提供了XDR和SIEM功能&#xff0c;保护云、容器和服务器工作负载。这些功能包括日志数据分析、入侵和恶意软件检测、文件完整性监控、配置评估、漏洞检测以及对法规遵从性的支持。详细信息可以参考Wazuh - Open Source XDR. Open Source SIEM.官方网站 Wazuh解决…

基于x86+FPGA+AI无风扇准系统,AFC自动售检票系统控制器

冰翅无风扇准系统&#xff0c;AFC自动售检票系统建设的理想选择 在交通强国、智慧交通建设的大背景下&#xff0c;人工智能、大数据、计算机及网络技术等正加快融合应用到交通领域&#xff0c;助力提升出行服务的智能化、自动化水平。&#xff08;AFC&#xff09;自动售检票系…

基于 HTML+ECharts 实现的大数据可视化平台模板(含源码)

构建大数据可视化平台模板&#xff1a;基于 HTML 和 ECharts 的实现 大数据的可视化对于企业决策、市场分析和业务洞察至关重要。通过直观的数据展示&#xff0c;团队可以快速理解复杂的数据模式&#xff0c;发现潜在的业务机会。本文将详细介绍如何利用 HTML 和 ECharts 实现一…

qt--做一个拷贝文件器

一、项目要求 使用线程完善文件拷贝器的操作 主窗口不能假死主窗口进度条必须能动改写文件大小的单位&#xff08;自适应&#xff09; 1TB1024GB 1GB1024MB 1MB1024KB 1KB1024字节 二、所需技术 1.QFileDialog 文件对话框 QFileDialog也继承了QDialog类&#xff0c;直接使用静态…

UE4如何直接调试Game

某些功能在编辑器里不好调试&#xff0c;例如Pak&#xff0c;就需要直接调试 Game&#xff0c;做法是选择 Game&#xff0c;不要选择Client&#xff0c;加断点&#xff0c;然后点击 Debug 就好了。 断点调试成功&#xff1a; 同时看到界面&#xff1a;

【无人机】低空经济中5G RedCap芯片的技术分析报告

1. 引言 图一. 新基建&#xff1a;低空经济 低空经济作为一种新兴的经济形态&#xff0c;涵盖了无人机、电动垂直起降飞行器&#xff08;eVTOL&#xff09;、低空物流、空中交通管理等多个领域。随着5G网络的普及和演进&#xff0c;5G RedCap&#xff08;Reduced Capability&a…

pip install albumentations安装下载超级细水管

albumentations 是一个用于图像增强的 Python 库&#xff0c;它提供了丰富的图像变换功能&#xff0c;可以用于数据增强&#xff0c;从而提高深度学习模型的泛化能力。 直接安装命令&#xff1a; pip install albumentations但是如果半夜遇到这种19kB/s的下载速度 为头发着想&…

LeetCode24 两两交换链表中的节点

前言 题目&#xff1a; 24. 两两交换链表中的节点 文档&#xff1a; 代码随想录——两两交换链表中的节点 编程语言&#xff1a; C 解题状态&#xff1a; 没画图&#xff0c;被绕进去了… 思路 思路还是挺清晰的&#xff0c;就是简单的模拟&#xff0c;但是一定要搞清楚交换的…

STM32的外部中断详解

一、什么是中断&#xff1f; 想象一下你正在家里做饭&#xff0c;突然门铃响了&#xff0c;你听到门铃声后&#xff0c;会暂时放下手中的事情&#xff08;比如炒菜&#xff09;&#xff0c;去开门看看是谁。在这个例子中&#xff0c;门铃声就是一个“中断”&#xff0c;它打断…

使用puma部署ruby on rails的记录

之前写过一篇《记录一下我的Ruby On Rails的systemd服务脚本》的记录&#xff0c;现在补上一个比较政治正确的Ruby On Rails的生产环境部署记录。使用Puma部署项目。 创建文件 /usr/lib/systemd/system/puma.service [Unit] DescriptionPuma HTTP Server DocumentationRuby O…

快速入门了解Ajax

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Ajax的初识 意义&#xff1a;AJAX&#xff08;Asynchronous JavaScript and…

rce漏洞-ctfshow(50-70)

Web51 if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\|\%|\x09|\x26/i", $c)){ system($c." >/dev/null 2>&1"); } Nl&#xff0c;绕过tac&#xff0c;cat&#xff0c;绕…

Rce漏洞复习(ctfshow29-50)

Rce漏洞简介思维导图 Web29 代码审计&#xff1a; if(!preg_match("/flag/i", $c)){ eval($c); 传参没有flag&#xff08;大小写都没有出现&#xff09; Payload&#xff1a; ?csystem("ls"); ?csystem("tac *lag.php"); Web30 代码…

【网络流】——初识(最大流)

网络流-最大流 基础信息引入一些概念基本性质 最大流定义 Ford–Fulkerson 增广Edmons−Karp算法Dinic 算法参考文献 基础信息 引入 假定现在有一个无限放水的自来水厂和一个无限收水的小区&#xff0c;他们之间有多条水管和一些节点构成。 每一条水管有三个属性&#xff1a…