XSS漏洞原理

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.mfbz.cn/a/214013.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC常用注解和用法总结

目标&#xff1a; 1. 熟悉使用SpringMVC中的常用注解 目录 前言 1. Controller 2. RestController 3. RequestMapping 4. RequestParam 5. PathVariable 6. SessionAttributes 7. CookieValue 前言 SpringMVC是一款用于构建基于Java的Web应用程序的框架&#xff0c;它通…

3dMax拼图生成工具Puzzle2D使用教程

Puzzle2D for 3dsMax拼图生成工具使用教程 Puzzle2D简介&#xff1a; 2D拼图随机生成器&#xff08;英文&#xff1a;Puzzle2D&#xff09; &#xff0c;是一款由#沐风课堂#用MAXScript脚本语言开发的3dsMax建模小工具&#xff0c;可以随机创建2D可编辑样条线拼图图形。可批量…

3、在链式存储结构上建立一棵二叉排序树。

3、在链式存储结构上建立一棵二叉排序树。 分析&#xff1a; &#xff08;1&#xff09;定义二叉排序树的结点。 &#xff08;2&#xff09;插入操作&#xff1a;在建立二叉排序树的过程中&#xff0c;需要一个插入操作&#xff0c;用于将新的元素插入到树中。 插入操作的核心思…

openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表

文章目录 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表140.1 相关概念140.2 操作步骤140.3 维护建议 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表 为了保证数据库的有效运行&#xff0c;数据库必须在插入/删除操作后&#xff0c;基于…

P-Tuning v2论文概述

P-Tuning v2论文概述 P-Tuning v2论文概述前言微调的限制性P-Tuning的缺陷P-Tuning v2 摘要论文十问NLU任务优化点实验数据集预训练模型实验结果消融实验 结论 P-Tuning v2论文概述 前言 微调的限制性 微调&#xff08;fine-tuning&#xff09;是一种在预训练模型基础上进行目…

【Docker】容器数据持久化及容器互联

一、Docker容器的数据管理 1.1、什么是数据卷 数据卷是经过特殊设计的目录&#xff0c;可以绕过联合文件系统&#xff08;UFS&#xff09;&#xff0c;为一个或者多个容器提供访问&#xff0c;数据卷设计的目的&#xff0c;在于数据的永久存储&#xff0c;它完全独立于容器的…

获取所有的 font-awesome图标, 用于本地选择使用

访问 font-awesome 首页 Font Awesome 4.7.0 675款图标,Font Awesome,奥森图标,Font Awesome 4.7.0,Font Awesome中文站,Font Awesome IE7兼容处理,Font Awesome图标搜索,Font Awesome中文站-ThinkCMF 调出控制台 , 执行下面的脚步 // 获取所有的图标元素 var icons docu…

《YOLOv5原创自研》专栏介绍 CSDN独家改进创新实战专栏目录

YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html &#x1f4a1;&#x1f4a1;&#x1f4a1;全网独家首发创新&#xff08;原创&#xff09;&#xff0c;适合paper &#xff01;&#xff01;&#xff01; &#x1f4a1;&#x1f4a1;&#x1f4a1;…

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

均匀线阵 均匀线性阵列(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…

Hdoop学习笔记(HDP)-Part.08 部署Ambari集群

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

unity学习笔记17

一、动画组件 Animation Animation组件是一种更传统的动画系统&#xff0c;它使用关键帧动画。你可以通过手动录制物体在时间轴上的变换来创建动画。 一些重要的属性&#xff1a; 1. 动画&#xff08;Animation&#xff09;&#xff1a; 类型&#xff1a; Animation组件允许…

冗余链路和生成树协议

文章目录 冗余链路生成树协议 冗余链路 背景&#xff1a;在许多交换机或者交换机设备组成的网络环境中&#xff0c;通常都使用一些备份连接&#xff0c;来提高网络的健全。在金融网中A和B之间不止一条线路&#xff0c;保证网络的安全性能。备份连接也叫做冗余链路 冗余链路带…

7.24 SpringBoot项目实战【审核评论】

文章目录 前言一、编写控制器二、编写服务层三、Postman测试前言 我们在 上文 7.23 已经实现了 评论 功能,本文我们继续SpringBoot项目实战 审核评论 功能。逻辑如下: 一是判断管理员权限,关于角色权限校验 在 7.5 和 7.6 分别基于 拦截器Interceptor 和 切面AOP 都实现过…

还搞不懂什么是参数,超参数吗?三分钟快速了解参数与超参数的概念和区别!!!

文章目录 前言一、参数是什么&#xff1f;二、超参数是什么三&#xff0c;常使用的超参数有哪些 前言 参数是模型中可被学习和调整的参数&#xff0c;通过训练数据进行学习和优化&#xff1b; 而超参数则是手动设置的参数&#xff0c;用于控制模型的行为和性能&#xff0c;超…

【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现

目录 Ⅰ. 实践说明 0x00 计数器(Counter) 0x01 异步计数器(Asynchronous Counter)

Spring MVC数据绑定的几种方法(一)

这篇文章包含spring mvc的默认数据类型绑定和简单数据类型绑定。内容来自实验。 准备&#xff1a; &#xff08;1&#xff09;在IDEA环境中从archetye创建webapp类型的maven项目exp6。 &#xff08;2&#xff09;在src\main目录下创建并标注java源代码文件夹和resources资源文…

AGI智能新时代,大模型为软件开发带来范式变革

导语 | 人工智能作为新一轮科技革命和产业变革的重要驱动力量&#xff0c;尤其是在当下新一轮 AI 大模型、生成式 AI 浪潮背景下&#xff0c;重视通用人工智能&#xff08;AGI&#xff09;成为行业的共识。在当前&#xff0c; AGI 技术背后的逻辑究竟是怎样的&#xff1f;技术创…

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

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

Shell循环:expect(一)

一、名词解释&#xff1a; 我们通过Shell可以实现简单的控制流功能&#xff0c;如&#xff1a;循环、判断等。但是对于需要交互的场合则必须通过人工来干预&#xff0c;有时候我们可能会需要实现和交互程序如ssh服务器等进行交互的功能。而Expect就使用来实现这种功能的工具。E…

Wireshark 协议插件Lua开发 -数据包内嵌协议的解释

概述 因为公司项目涉及的协议打包&#xff0c;协议包内又嵌了一层IP包的奇葩套娃结构&#xff0c;为了方便抓包调试&#xff0c;利用Wireshark的协议插件开发功能&#xff0c;写了一个插件&#xff0c;博文记录以备忘。 环境信息 Wireshark 4.0.3 协议结构体套娃图 插件安装…
最新文章