XSS漏洞原理

news2025/1/16 15:00:53

XSS漏洞介绍:

         跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!

XSS漏洞原理:

       服务器对用户提交的数据过滤不严,导致浏览器把用户的输入当成了JS代码并直接返回给客户端执行,从而实现对客户端的攻击目的

例如:

        我在网页中输入js的弹框代码,前后端没有对这段代码进行过滤,那就会造成客户使用的时候出现弹框或者跳转至黑客想要的页面,在那个页面输入用户信息造成信息泄露
        up现在实力有限,拿本地靶场初步示例,请多谅解!!!

这里我让这个页面弹出了XSS
       如果我让页面中途跳转至一个相似的页面,也需要用户输入信息,如果用户把私人信息填上去了,信息就传到黑客手上 
       XSS手段甚至可以获得用户的cookie然后模仿用户登录登录账号

初步演示一下哈:

插入的js代码:
本代码会弹出一个搜索框然后输入之后会在百度搜索里面搜索你输入的内容

<script>
function openBaiduSearch() {
  var searchQuery = prompt("请输入要搜索的内容:");
  if (searchQuery) {
    var url = "https://www.baidu.com/s?wd=" + encodeURIComponent(searchQuery);
    window.open(url, "_blank");
  }
}

openBaiduSearch();
</script>

输入sztu之后会跳转至


三大XSS漏洞:

1.反射性XSS

       反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中。 反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

不带过滤的情况下服务端的代码:

<?php 
// Is there any input? 
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { 
    // Feedback for end user 
    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>'; 
} 
?>

如果输入的javascript会直接解析并且被输出出来

2.存储型XSS

       持久型跨站脚本(Persistent Cross-Site Scripting)也等同于存储型跨站脚本(Stored Cross-Site Scripting)。 此类 XSS 不需要用户单击特定 URL 就能执行跨站脚本,攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

不带过滤的服务端源码:

<?php
  if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );
    // Sanitize message input
    $message = stripslashes( $message );
    $message = mysql_real_escape_string( $message );
    // Sanitize name input
    $name = mysql_real_escape_string( $name );
    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );
    //mysql_close(); }
?>

trim() 函数用于去除字符串两端的空白字符(包括空格、制表符、换行符等),并返回去除空白字符后的结果。
stripslashes() 函数用于去除字符串中的反斜杠(\)。
在某些情况下,字符串中的特殊字符前可能会有一个反斜杠,这是为了对特殊字符进行转义,以确保它们在字符串中正常显示。例如,如果你想在字符串中包含引号(" 或 '),你可以使用反斜杠进行转义,即 \" 或 \'。然而,有时你可能希望将这些反斜杠从字符串中移除,以便得到原始的未转义字符串。
mysql_real_escape_string() 函数用于在 PHP 中对字符串进行转义,以便在 MySQL 数据库中安全地插入或更新数据。
mysql_query()用于传入对数据库的指令

tips:

       如果输入的javascript指令被存入数据库里,那所有用户在使用的时候,数据库返回的包都会执行一次这段指令,所有用户都会受到影响。

3.DOM型XSS

       传统的 XSS 漏洞一般出现在服务器端代码中,而 DOM-Based XSS 是基于 DOM 文档对象模型的一种漏洞,所以,受客户端浏览器的脚本代码所影响。客户端 JavaScript 可以访问浏览器的 DOM 文本对象模型,因此能够决定用于加载当前页面的 URL。换句话说,客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不依赖于服务器端的数据,而从客户端获得 DOM 中的数据(如从 URL 中提取数据)并在本地执行。另一方面,浏览器用户可以操纵 DOM 中的一些对象,例如 URL、location 等。用户在客户端输入的数据如果包含了恶意 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到基于 DOM 的 XSS 攻击。

   DOM型XSS的特点:

  • 攻击向量:DOM 型 XSS 的攻击向量主要是用户的输入数据,例如 URL 参数、表单输入等。攻击者通过操纵用户的输入来构造恶意代码。
  • 服务器不参与:DOM 型 XSS 攻击不需要服务器端的响应来触发,而是完全在浏览器中进行。因此,防护措施需要更多地侧重于前端的安全性
  • 需要客户端执行:恶意脚本必须通过浏览器的 JavaScript 引擎来执行,因此攻击者需要通过诱导用户访问恶意页面或点击恶意链接来触发攻击。

XSS攻击的危害:

  1. 盗取用户信息:攻击者可以利用XSS漏洞注入恶意脚本,当用户浏览包含这些脚本的网页时,恶意脚本可以窃取用户的敏感信息,如登录凭据、会话令牌、银行账户信息等。

  2. 会话劫持:通过XSS攻击,攻击者可以窃取用户的会话令牌或cookie,并利用这些信息冒充用户身份,进行未经授权的操作,例如盗取用户账号、篡改用户数据等。

  3. 恶意操作:攻击者可以在受影响的网页上注入恶意代码,通过控制用户的浏览器执行恶意操作,例如重定向到恶意网站、发送恶意请求、执行未经授权的操作等。

  4. 网站破坏:攻击者可以通过XSS攻击破坏网站的完整性和可用性。他们可以修改网页内容、篡改数据库、删除或损坏关键数据,导致网站无法正常运行或数据丢失。

  5. 传播恶意软件:攻击者可以利用XSS漏洞在受影响的网站上注入恶意代码,并将网站作为传播恶意软件的平台。当用户访问受感染的网页时,他们可能会被重定向到包含恶意软件的网站,导致他们的设备感染病毒、间谍软件或勒索软件。

  6. 声誉损害:如果一个网站受到XSS攻击,攻击者可以在该网站上显示虚假信息、恶意广告或误导用户的内容。这可能会导致用户对网站的信任下降,影响网站的声誉和可靠性。
    (参考如果京东淘宝购物时一直给你弹出奇奇怪怪的东西,你还会想在这购物吗...)

XSS攻击的防护:

  1.反射型防护:

  • 输入验证和过滤:对所有用户输入的数据进行验证和过滤,确保只接受预期的数据类型和格式。可以使用白名单过滤用户输入,拒绝或删除包含恶意脚本的内容。
  • 输出编码:在将用户输入的数据插入到HTML页面中之前,对数据进行适当的编码。例如,使用HTML实体编码(如将<编码为<)或JavaScript编码(如将'编码为')来防止恶意脚本的执行。
  • CSP(Content Security Policy):使用CSP来限制页面可以加载的资源和执行的代码。CSP可以阻止执行内联脚本和外部脚本的注入,并限制可执行的脚本来源。

   2.存储型防护:

  • 输入验证和过滤:对所有用户输入的数据进行严格的验证和过滤,确保只接受预期的数据类型和格式。避免将未经验证的用户输入直接存储到数据库或文件中。
  • 输出编码:在将用户输入的数据从数据库或文件中提取并插入到HTML页面中之前,对数据进行适当的编码,以防止恶意脚本的执行。
  • 安全的存储:在将用户输入存储到数据库或文件时,使用安全的存储方式,如参数化查询或预编译语句,以防止恶意脚本的插入。

   3.DOM型防护:

  • 输入验证和过滤:对所有用户输入的数据进行验证和过滤,确保只接受预期的数据类型和格式。避免将未经验证的用户输入直接用于DOM操作。
  • 输出编码:在将数据插入到DOM中之前,对数据进行适当的编码。可以使用DOM API提供的安全方法来插入文本内容,如使用textContent而不是innerHTML。
  • 最小化DOM操作:尽量减少对DOM的直接操作,特别是使用用户输入作为操作的一部分。可以考虑使用现有的安全库或框架,如React或Angular,来帮助防止DOM型XSS攻击。


今日分享就到这吧,等up努力成长为一个合格的hacker再来看看怎么完善。
up会努力成为能自己写脚本,找漏洞的hacker!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构 | 查漏补缺之ASL、

目录 ASL 情形之一&#xff1a;二分查找 线索二叉树 哈夫曼树 大根堆 邻接表&邻接矩阵 ASL 参考博文 关于ASL(平均查找长度)的简单总结_平均查找长度asl-CSDN博客 情形之一&#xff1a;二分查找 线索二叉树 参考博文 线索二叉树(线索链表遍历&#xff0c;二叉树…

【拓展】Loguru:更为优雅、简洁的Python 日志管理模块

目录 一、简单介绍 二、安装与简单使用 ​三、常见用法 3.1 显示格式 3.2 写入文件 3.3 json日志 3.4 日志绕接 3.5 并发安全 四、高级用法 4.1 接管标准日志logging 4.2 输出日志到网络服务器 4.2.1 自定义日志服务器 ​4.2.2 第三方库日志服务器 4.3 与pytest结…

LeetCode | 104. 二叉树的最大深度

LeetCode | 104. 二叉树的最大深度 OJ链接 这里需要注意的一点是每次有返回值&#xff0c;需要定义变量来保存上一次的值最后取最高的一方加1 int maxDepth(struct TreeNode* root) {if(root NULL)return NULL;int left maxDepth(root->left);int right maxDepth(root-…

MDETR 论文翻译及理解

题目Abstract1. Introduction2. Method2.1. Background2.2. MDETR2.2.1 Architecture2.2.2 Training 3. Experiments3.1. Pre-training Modulated Detection 预训练调制检测3.2. Downstream Tasks3.2.1 Few-shot transfer for long-tailed detection 4. Related work5. Conclus…

阵列信号处理---均匀线阵和均匀加权线阵

均匀线阵 均匀线性阵列(ULA&#xff1a;Uniform Linear Array)&#xff1a;有N个阵元位于z轴上且具有均匀间距d。 一般都把阵列的中心放在坐标系的原点。如下图 阵元的位置为 p z n ( n − N − 1 2 ) d &#xff0c; n 0 , 1 , … , N − 1 p_{z_n}\big(n-\frac{N-1}{2}\b…

UCore-OS实验Lab0

实验内容&#xff1a;搭建ucore-os的实验环境 实验准备内容&#xff1a;vmware虚拟机&#xff0c;ubuntu22.04镜像&#xff0c;qemu7.0.0源码 ucore代码地址 GitHub - chyyuu/os_kernel_lab at x86-32 实验步骤&#xff1a; 在vmware中安装ubuntu&#xff0c;因为我个人喜欢…

如何保持高能量

精力管理 精力管理对于平衡多项任务和保持热情至关重要。 通过自我积极反馈循环系统培养积极的内心声音。 培养仪式和习惯来控制内心的声音并保持能量。 学习语言带来正能量和宝贵的技能 保持高能量需要自我赋权和体力充电。 经常锻炼有很多好处&#xff0c;包括改善健康…

作业飞翔的鸟

首先创建一个新的Java项目命名为“飞翔的鸟”&#xff0c;并在src中创建一个包命名为“com.qiku.bird"&#xff0c;在这个包内分别创建4个类命名为“Bird”、“BirdGame”、“Column”、“Ground”&#xff0c;并向需要的图片素材导入到包内。 package com.qiku.bird;impo…

[ Linux Audio 篇 ] 音频开发入门基础知识

在短视频兴起的背景下&#xff0c;音视频开发越来越受到重视。接下来将为大家介绍音频开发者入门知识&#xff0c;帮助读者快速了解这个领域。 轻柔的音乐、程序员有节奏感的键盘声、嗡嗡的发动机、刺耳的手提钻……这些声音是如何产生的呢&#xff1f;又是如何传到我们耳中的…

基于Java SSM框架+Vue实现旅游资源网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现旅游资源网站演示 摘要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述旅游…

IP数据报首部检验和计算方法

图源&#xff1a;360百科 计算首部检验和的步骤&#xff1a;&#xff08;用二进制计算&#xff09; 将IP数据报的首部按照每16位&#xff08;2个字节&#xff09;一组进行分组&#xff0c;这样固定首部能够得到9个这样的16位二进制数&#xff1a; 版本首部长度区分服务&#…

JVM之内存区域(二)

JVM内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。 线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁(在 Hotspot VM 内, 每个线程都与操作系统的本地线程直接映射…

Python必备工具shelve与dbm全面解析!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 当涉及存储大量数据并且需要高效访问时&#xff0c;Python开发人员常常寻找适当的工具。shelve和dbm模块是Python中用于本地持久化存储数据的两个强大工具。它们允许开发人员以键值对的形式存储数据&#xff0c;…

vue发送请求携带token,拼接url地址下载文件

封装请求 &#xff0c;该请求为普通的get请求 该请求返回值为&#xff1a; 请求成功之后拼接URL地址下载文件 代码块 downTemplateRequest(activeKeys.value).then((res) > {let url http://47.169.168.99:18888/media/${res.data.name};var elink document.createElemen…

vscode问题:此扩展在此工作区中被禁用,因为其被定义为在远程扩展主机中运行

mac按shiftcommandp windows按ctrlshiftP&#xff1a; 将当前项目文件夹添加进去就ok了。

ADC欠采样以及应用案例

欠采样与其优劣 ADC&#xff08;Analog-to-Digital Converter&#xff09;的欠采样是指在信号的采样过程中&#xff0c;采样频率低于被采样信号的最高频率的情况。这意味着采样率不足以捕捉到信号的完整信息&#xff0c;而是以较低的频率对信号进行采样。 欠采样在某些特定情…

python之pyqt专栏11-事件(QEvent)

QApplication.exec() 在main.py中&#xff0c;实例化app对象&#xff0c;然后在 sys.exit(app.exec())中调用app.exec()&#xff0c; if __name__ __main__:# 实例化应用app QApplication(sys.argv)# 实例化MyMainFormmyw MyMainForm()myw.show()# 启动应用程序的事件循环并…

uni-app一些目录结构、方法、生命周期、打包、微信小程序登录与支付

1、关于uniapp的目录结构 跟普通vue项目目录结构差不多&#xff0c;多了几个核心文件&#xff0c;manifest.json是配置应用名称、appid、logo、版本等打包信息用的&#xff0c;pages.json的作用是配置页面路径、页面窗口样式、tabBar、navigationBar等页面类信息 2、页面适配方…

c语言-归并排序

目录 1、归并排序基本思想 2、归并排序的实现&#xff08;递归法&#xff09; 2.1 代码实现递归法归并排序 3、归并排序的实现&#xff08;非递归法&#xff09; 3.1 修正边界问题 3.2 代码实现非递归法归并排序 结语&#xff1a; 前言&#xff1a; 归并排序是一种把数…

go并发编程(中)

目录 一、并发安全性 1.1 变量并发安全性 1.2 容器并发安全性 二、多路复用 三、协程常见的面试题 3.1交替打印奇数偶数 一、并发安全性 1.1 变量并发安全性 这个和C中并发安全是一样的&#xff0c;主要是多个线程对临界资源的同时访问&#xff0c;最经典的就是 n操作…