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 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

不带过滤的服务端源码:

<?phpif( 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.mzph.cn/news/194149.shtml

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

相关文章

C语言第四十二弹---使用多种方法实现字符串左旋转

使用多种方法实现字符串左旋转 一、 左移法 思路&#xff1a;每一次通过移动第一个字符&#xff0c;然后把后面的字符前移&#xff0c;然后再进行移动第一个字符再前移。故需要使用嵌套循环&#xff0c;外层循环控制移动第一个字符的次数&#xff0c;第二个循环进行字符前移 …

基于Java SSM框架+Vue实现企业公寓后勤管理系统项目【项目源码+论文说明】

基于java的SSM框架Vue实现企业宿舍后勤管理网站演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所…

汽车电子芯片介绍之Aurix TC系列

Infineon的AURIX TC系列芯片是专为汽车电子系统设计的&#xff0c;采用了32位TriCore处理器架构。该系列芯片具有高性能、低功耗和丰富的外设接口&#xff0c;适用于广泛的汽车电子应用。以下是AURIX TC系列芯片的主要特性&#xff1a; 1. 高性能处理器 AURIX TC芯片采用了高…

【Linux】进程控制-进程终止

目录 一、进程终止&#xff0c;OS做了什么&#xff1f; 二、进程终止的常见方式 1、代码跑完&#xff0c;结果正确 2、代码跑完&#xff0c;结果不正确 补充 (1)、main函数的返回值的意义是什么&#xff1f; (2)、return 0的含义是什么&#xff1f; (3)、退出码是什么和…

基于OpenCV和改进深度学习网络的香菇分级图像分割系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 近年来&#xff0c;随着计算机视觉和深度学习的快速发展&#xff0c;图像分割技术在各个领域中得到了广泛应用。图像分割是将图像划分为不同的区域或对象的过程&…

Visual Studio 2022+Python3.11实现C++调用python接口

大家好&#xff01;我是编码小哥&#xff0c;欢迎关注&#xff0c;持续分享更多实用的编程经验和开发技巧&#xff0c;共同进步。 查了一些资料&#xff0c;不是报这个错&#xff0c;就是报哪个错&#xff0c;没有找到和我安装的环境的一致的案例&#xff0c;于是将自己的摸索分…

SQL错题集1

1.找出选修课程成绩最差的选课记录 注&#xff1a; 聚合函数只能用在group by和&#xff08;&#xff09;括号中 找最值可用排序order bylimit 1 2. 查询选修成绩 合格的课程 超过2门的 学生编号 3.删除姓名为"LiMing"的学生信息 注&#xff1a; 删除一整行信息&…

Google Guava 集合工具使用详解

文章目录 集合集合分类- MultisetHashMultisetTreeMultisetLinkedHashMultisetConcurrentHashMultisetEnumMultisetImmutableMultiset - MultimapArrayListMultimapHashMultimapLinkedListMultimapLinkedHashMultimapTreeMultimapImmutableListMultimapImmutableSetMultimap - …

CnosDB有主复制演进历程

分布式存储系统的复杂性涉及数据容灾备份、一致性、高并发请求和大容量存储等问题。本文结合CnosDB在分布式环境下的演化历程&#xff0c;分享如何将分布式理论应用于实际生产&#xff0c;以及不同实现方式的优缺点和应用场景。 分布式系统架构模式 分布式存储系统下按照数据复…

Android Audio实战——音频属性设置(二十二)

在 Android 中,使用音频属性(AudioAttributes)可以控制音频的行为。AudioAttributes 已经定义了一些常见的属性,比如音频用途、音频内容类型、音频标志等。 一、音频属性简介 1、常见属性 音量(volume):使用 setParameters("volume=5") 将音量设置为 5(范围…

java消息中间件简介

一、为什么要使用消息中间件 消息中间件就是可以省去繁琐的步骤&#xff0c;直达目的&#xff0c;怎么讲呢&#xff0c;就是比如你想很多人&#xff0c;知道你的动态&#xff0c;而知道的人可能手机没电&#xff0c;可能手机信号不好&#xff0c;可能手机不在服务区&#xff0c…

智能优化算法应用:基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.狮群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Maven的安装与配置本地仓库,镜像源,环境变量详细步骤

参考视频&#xff1a; 黑马程序员2023新版JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程 【小飞非系列】最新Maven实战教程-项目实战构建利器 文章目录 一.下载Maven安装包二.配置Maven的本地仓库(本机仓库)三.配置镜像源&#xff08;加速jar包的下载)四.配置Maven的环…

Zookeeper 安装与部署

Zookeeper官网 目录 1 配置文件参数解读2 Zookeeper 单点安装3 Zookeeper 分布式安装 1 配置文件参数解读 Zookeeper 中的配置文件 zoo.cfg 中参数含义解读如下&#xff1a; &#xff08;1&#xff09;tickTime 2000&#xff1a;通信心跳数&#xff0c;Zookeeper 服务器与客户…

IdleStateHandler 心跳机制源码详解

优质博文&#xff1a;IT-BLOG-CN 一、心跳机制 Netty支持心跳机制&#xff0c;可以检测远程服务端是否存活或者活跃。心跳是在TCP长连接中&#xff0c;客户端和服务端定时向对方发送数据包通知对方自己还在线&#xff0c;保证连接的有效性的一种机制。在服务器和客户端之间一…

再谈项目管理中的效率问题

一、把事情做对。 敏捷的核心理念追求的就是把事情做对&#xff0c;这样的效率是最高的。中国古代就有南辕北辙的故事&#xff0c;方向错了再怎么努力都是白搭。那什么才是对的事情&#xff1f;这里分成了两派&#xff1a;1、瀑布方式认为一开始提的合同、需求就是对的事情&am…

嵌入式常用滤波算法

在嵌入式系统中&#xff0c;信号处理是一个关键的方面&#xff0c;特别是在处理来自各种传感器的数据时。滤波算法在这方面发挥着重要作用&#xff0c;用于去除噪声、平滑数据或提取有用的信号。以下是一些在嵌入式系统中常用的滤波算法&#xff1a; 1 低通滤波器&#xff08;…

bean依赖属性配置

bean依赖属性配置 文章目录 bean依赖属性配置 Data ConfigurationProperties(prefix "cartoon") public class CartoonProperties {private Cat cat;private Mouse mouse; }cartoon:cat:name: whatage: 5mouse:name: howage: 6这样的话&#xff0c;业务bean无需在读…

FPC和PCB有哪些区别?

现在电子技术越来越先进&#xff0c;CPU可以做到5nm工艺&#xff0c;电路板可以做到几十层&#xff0c;可折叠屏应用多款手机中。 什么是FPC&#xff1f; FPC&#xff1a;Flexible Printed Circuit&#xff0c;柔性电路板&#xff0c;又被称为“软板” FPC 以聚酰亚胺或聚酯薄…

Active Stereo Without Pattern Projector论文精读

1.背景补充 主动立体相机和被动立体相机的主要区别在于它们获取立体视觉信息的方式 主动立体相机12&#xff1a; 主动立体视觉是指寻找最佳的视角去重建目标或者场景1。主动视觉的实现方式通常有&#xff1a;改变环境中的光照条件、改变相机的视角、移动相机自身位置等&…