【网络安全】跨站脚本(xss)攻击

跨站点脚本(也称为 XSS)是一种 Web 安全漏洞,允许攻击者破坏用户与易受攻击的应用程序的交互。它允许攻击者绕过同源策略,该策略旨在将不同的网站彼此隔离。跨站点脚本漏洞通常允许攻击者伪装成受害者用户,执行用户能够执行的任何操作,并访问用户的任何数据。如果受害用户在应用程序中具有特权访问权限,那么攻击者可能能够完全控制应用程序的所有功能和数据。

跨站点脚本攻击的工作原理是操纵易受攻击的网站,以便将恶意 JavaScript 返回给用户。当恶意代码在受害者的浏览器中执行时,攻击者可以完全破坏他们与应用程序的交互。

在这里插入图片描述

XSS 攻击主要分为三种类型

  • 反射型XSS,其中恶意脚本来自当前的HTTP请求。
  • 存储型 XSS,其中恶意脚本来自网站的数据库。
  • 基于 DOM 的 XSS,该漏洞存在于客户端代码而不是服务器端代码中。

1、反射式跨站脚本

反射型 XSS是最简单的跨站脚本。当应用程序接收 HTTP 请求中的数据并以不安全的方式将该数据包含在立即响应中时,就会出现这种情况。

下面是一个反映 XSS漏洞 的简单示例:

<!DOCTYPE html>
<html>
<head><script type="text/javascript" src="lib/jquery-3.3.1.min.js"></script>
</head><body><p>姓名:<p id="name_content"></p></p>
</body>
<script>let getUrlParam = function () {console.log("获取参数");var r = window.location.search;var paramPairArray = r.replace("?", "").split("&");let paramMap = new Map();for (const index  in paramPairArray) {var value = paramPairArray[index];var valueArray = value.split("=")paramMap[valueArray[0]]=decodeURI(valueArray[1]);}$nameContent = $('#name_content');setTimeout(() => {// $nameContent.html(`\<script\>alert("hi man!xss come here")\<\/script\>`);$nameContent.html(paramMap["status"]);}, 2000);}getUrlParam();
</script>
</html>
文件路径/demo-01.html?status=%3Cscript%3Ealert(%22hi%20man!xss%20come%20%22)%3C/script%3E

在浏览器中输入上面的请求路径:
在这里插入图片描述
2、存储的跨站点脚本

当应用程序从不受信任的源接收数据并以不安全的方式将该数据包含在其后续的 HTTP 响应中时,就会出现存储型 XSS(也称为持久性或二阶 XSS)。

有问题的数据可能通过 HTTP 请求提交给应用程序;例如,博客文章的评论、聊天室中的用户昵称或客户订单的联系方式。在其他情况下,数据可能来自其他不受信任的来源;例如,显示通过 SMTP 接收的消息的网络邮件应用程序、显示社交媒体帖子的营销应用程序或显示来自网络流量的数据包数据的网络监控应用程序。

下面是一个存储型 XSS漏洞 的简单示例。留言板应用程序允许用户提交消息,这些消息将显示给其他用户:

<p>Hello, this is my message!</p>

该应用程序不会对数据执行任何其他处理,因此攻击者可以轻松发送攻击其他用户的消息:

<p><script>/* Bad stuff here... */</script></p>

3、基于 DOM 的跨站点脚本编写

当应用程序包含一些客户端 JavaScript 以不安全的方式(通常是将数据写回 DOM)处理来自不受信任源的数据时,就会出现基于 DOM 的 XSS(也称为 DOM XSS)。
在以下示例中,应用程序使用一些 JavaScript 从输入字段读取值并将该值写入 HTML 中的元素:

var search = document.getElementById('search').value;
var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;

如果攻击者可以控制输入字段的值,他们就可以轻松构造一个恶意值,导致自己的脚本执行:

You searched for: <img src=1 onerror='/* Bad stuff here... */'>

在典型情况下,输入字段将由 HTTP 请求的一部分(例如 URL 查询字符串参数)填充,从而允许攻击者使用恶意 URL 进行攻击,其方式与反射型 XSS 相同。

利用跨站点脚本漏洞的攻击者通常能够:

  • 冒充或伪装成受害用户。
  • 执行用户能够执行的任何操作。
  • 读取用户能够访问的任何数据。
  • 捕获用户的登录凭据。
  • 对网站进行虚拟破坏。
  • 将木马功能注入网站

一般来说,有效预防 XSS 漏洞可能涉及以下措施的组合:

  • 到达时过滤输入。在收到用户输入时,根据预期或有效输入尽可能严格地进行过滤。
  • 对输出数据进行编码。在 HTTP 响应中输出用户可控数据时,对输出进行编码以防止其被解释为活动内容。根据输出上下文,这可能需要应用 HTML、URL、JavaScript 和 CSS 编码的组合。
  • 使用适当的响应标头。为了防止不包含任何 HTML 或 JavaScript 的 HTTP 响应中出现 XSS,可 以使用 和Content-Type标X-Content-Type-Options头来确保浏览器按照您想要的方式解释响应。
    -内容安全政策。作为最后一道防线,您可以使用内容安全策略 (CSP) 来降低仍然发生的任何 XSS 漏洞的严重性。

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

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

相关文章

Linux C 多进程编程(面试考点)

嵌入式开发为什么要移植操作系统&#xff1f; 1.减小软硬件的耦合度&#xff0c;提高软件的移植性 2. 操作系统提供很多库和工具&#xff08;QT Open CV&#xff09;&#xff0c;提高开发效率 3.操作系统提供多任务机制&#xff0c;______________________? (提高C…

Linux 网络编程 和 字节序的概念

网络编程概述 不同于之前学习的所有通讯方法&#xff0c;多基于Linux内核实现&#xff0c;只能在同一个系统中不同进程或线程间通讯&#xff0c;Linux的网络编程可以实现真正的多机通讯&#xff01; 两个不相关的终端要实现通讯&#xff0c;必须依赖网络&#xff0c;通过地址…

C运行时错误——error realloc(): invalid next size

在LeetCode做题时遇到一个运行时错误&#xff0c;将引起问题的原因记录一下备忘&#xff1a; 我们在malloc或calloc等API分配内存时&#xff0c;libc库除了分配给我们在参数中设定大小的内存&#xff08;可能会有内存对齐&#xff0c;实际分配的比参数设定的要多&#xff09;&…

免费清理电脑:删除垃圾文件以提升电脑性能

求助&#xff01;电脑上没有可用空间 ​“我只在电脑上存储了大约100张照片&#xff0c;为什么我的硬盘空间已满&#xff1f;电脑运行速度也变得越来越慢&#xff0c;要疯了&#xff01;现在我想安装更新的驱动程序。我可以释放磁盘空间吗&#xff1f;有免费的Windows电脑清…

【React源码实现】元素渲染的实现原理

前言 本文将结合React的设计思想来实现元素的渲染&#xff0c;即通过JSX语法的方式是如何创建为真实dom渲染到页面上&#xff0c;本文基本不涉及React的源码&#xff0c;但与React的实现思路是一致的&#xff0c;所以非常适合小白学习&#xff0c;建议跟着步骤敲代码&#xff…

0101prox-shardingsphere-中间件

1 启动ShardingSphere-Proxy 1.1 获取 目前 ShardingSphere-Proxy 提供了 3 种获取方式&#xff1a; 二进制发布包DockerHelm 这里我们使用Docker安装。 1.2 使用Docker安装 step1&#xff1a;启动Docker容器 docker run -d \ -v /Users/gaogzhen/data/docker/shardings…

【学习日记】【FreeRTOS】FreeRTOS 移植到 STM32F103C8

前言 本文基于野火 FreeRTOS 教程&#xff0c;内容是关于 FreeRTOS 官方代码的移植的注意事项&#xff0c;并将野火例程中 STM32F103RC 代码移植到 STM32F103C8。 一、FreeRTOS V9.0.0 源码的获取 两个下载链接&#xff1a; 官 网 代码托管 二、源码文件夹内容简介 Source…

DevExpress WinForms数据编辑器组件,提供丰富的数据输入样式!(二)

DevExpress WinForms超过80个高影响力的WinForms编辑器和多用途控件&#xff0c;从屏蔽数据输入和内置数据验证到HTML格式化&#xff0c;DevExpress数据编辑库提供了无与伦比的数据编辑选项&#xff0c;包括用于独立数据编辑或用于容器控件(如Grid, TreeList和Ribbon)的单元格。…

POI groupRow 折叠分组,折叠部分不显示问题

折叠组是什么&#xff1f;如图就是用POI 实现的&#xff0c;代码很简单&#xff1a;sheet.groupRow(开始行&#xff0c;结束行)即可 但是万万没想到&#xff0c;最终实现出的结果&#xff0c;合并的组&#xff0c;有一部分并没有渲染出来&#xff0c;如下图&#xff1a; 因为我…

【分享】小型园区组网场景

小型园区组网图 在小型园区中&#xff0c;S2700&S3700通常部署在网络的接入层&#xff0c;S5700&S6700通常部署在网络的核心&#xff0c;出口路由器一般选用AR系列路由器。 接入交换机与核心交换机通过Eth-Trunk组网保证可靠性。 每个部门业务划分到一个VLAN中&#…

英特尔开始加码封装领域 | 百能云芯

在积极推进先进制程研发的同时&#xff0c;英特尔正在加大先进封装领域的投入。在这个背景下&#xff0c;该公司正在马来西亚槟城兴建一座全新的封装厂&#xff0c;以加强其在2.5D/3D封装布局领域的实力。据了解&#xff0c;英特尔计划到2025年前&#xff0c;将其最先进的3D Fo…

SocketTools.NET 11.0.2148.1554 Crack

添加新功能以简化使用 URL 建立 TCP 连接的过程。 2023 年 8 月 23 日 - 12:35新版本 特征 添加了“HttpGetTextEx”函数&#xff0c;该函数在返回字符串缓冲区中的文本内容时提供附加选项。添加了对“FileTransfer”.NET 类和 ActiveX 控件中的“GetText”和“PutText”方法的…