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.rhkb.cn/news/209002.html

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

相关文章

【读书笔记】微习惯

周日晚上尝试速读一本书《微习惯》&#xff0c;共七章看了下目录结构并不复杂&#xff0c;计划每章7-8分钟读完&#xff0c; 从20:15-21:00。读的时候&#xff0c;订下闹钟&#xff0c;催促着自己的进度。边读边记了一些要点和微信读书里面的划线。 第六章实践内容最为丰富&…

CnosDB有主复制演进历程

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

计算机网络TCP篇①

目录 一、TCP 基本信息 1.1、TCP 的头格式 1.2、什么是 TCP 1.3、什么是 TCP 连接 1.4、TCP 与 UDP 的区别 1.2、TCP 连接建立 1.2.1、TCP 三次握手的过程 1.2.2、为什么是三次握手&#xff1f;不是两次&#xff1f;四次&#xff1f;&#xff08;这个问题真是典中典&am…

C++基础 -34- 输入输出运算符重载

输出运算符重载格式 ostream & operator<<(ostream &out,person a) {cout << a.a << endl;return out; }举例输出运算符重载 #include "iostream"using namespace std;class person {public:person(int a):a(a){}int a; };ostream &…

LabVIEW在调用image.cpp或drawmgr.cpp因为DAbort而崩溃

LabVIEW在调用image.cpp或drawmgr.cpp因为DAbort而崩溃 出现下列问题&#xff0c;如何解决&#xff1f; 1. LabVIEW 程序因image.cpp或drawmgr.cpp中的错误而崩溃 2. 正在通过cRIO-9034运行独立的LabVIEW应用程序&#xff0c;但它因drawmgr.cpp中的错误而崩溃 …

什么是DDoS攻击

DDoS攻击 1. 定义2. DDoS攻击类型2.1 网络层攻击2.2 传输层攻击2.3 应用层攻击 3.DDoS攻击态势特点 1. 定义 分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种常见的网络攻击形式。攻击者利用恶意程序对一个或多个目标发起攻击&#xff0c;企图通过大规模互联网流量耗尽…

Zabbix监控接收SNMPTrap消息与SNMPTT结合

一.SNMP 协议 1.协议介绍 snmp 协议是日常使用的较多的一种协议&#xff0c;绝大多数网络设备/存储等都支持 snmp 协议&#xff0c;通过此协议可以实现设备状态的监控及管理。 2.主要组成 SNMP 协议包括以下三个部分: SNMP Agent&#xff1a;负责处理 snmp 请求&#xff0c…

Android11适配已安装应用列表

Android11适配已安装应用列表 之前做过已安装应用列表的适配&#xff0c;最近国内版SDK升级到33和隐私合规遇到很多问题&#xff0c;于是把已安装应用列表记录一下&#xff1a; 1、在Android11及以上的适配&#xff1a; package com.example.requestinsttallapplistdemoimpo…

POSTGRESQL中如何利用SQL语句快速的进行同环比?

目录 1. 引言2. 数据准备3. 时间序列数据处理4. 同比分析4.1 对两年的数据进行对比4.2 计算两年的差额和同比4.3 细分后的同比计算 5. 环比分析5.1 简单的日期环比计算5.2 先聚合再进行环比计算5.3 考虑日期不连续的环比计算 6. 性能优化技巧7. 注意事项与常见问题8. 结语 1. 引…

在Excel中,只需点击几下,就能只复制和粘贴可见单元格

你可以在Excel中隐藏列、行或单元格&#xff0c;以使数据输入或分析更容易。但是&#xff0c;当你复制并粘贴一个包含隐藏单元格的单元格区域时&#xff0c;它们会突然重新出现。 你可能没有意识到&#xff0c;但有一种方法可以只复制和粘贴Microsoft Excel中的可见单元格。只…

sql中group by和having的使用

group by&#xff1a;按照某个字段或者某些字段进行分组。 having&#xff1a;对分组之后的数据进行再次过滤&#xff0c;having必须和group by一起用&#xff0c;且在group by后面。 比如person表如下&#xff08;以下查询均基于此表&#xff09;&#xff1a; 1.group by 用法…

用Java写一个王者荣耀游戏

目录 sxt包 Background Bullet Champion ChampionDaji GameFrame GameObject Minion MinionBlue MinionRed Turret TurretBlue TurretRed beast包 Bear Beast Bird BlueBuff RedBuff Wolf Xiyi 打开Eclipse创建图片中的几个包 sxt包 Background package sxt;…

04-配置远程仓库的SSH免密登陆

配置SSH免密登录 配置步骤 创建好的远程仓库也可以使用SSH的方式进行访问,但如果没有配置公钥会有警告 第一步: 删除用户家目录下的.ssh目录,如果没有该目录或者该目录下已经有密钥了就不用执行该操作 #进入当前用户的家目录,删除.ssh 目录 LayneLAPTOP-Layne MINGW64 ~ $ r…

进行主从复制时出现的异常FATAL CONFIG FILE ERROR (Redis 6.2.6)Reading the configuration file

错误如下所示&#xff1a; FATAL CONFIG FILE ERROR (Redis 6.2.6) Reading the configuration file, at line 1 >>> include/myredis/redis.conf Bad directive or wrong number of arguments出现错误的原因是.conf文件中命令之间缺少空格&#xff0c;如下所示&…

豆粕期权 MVIX 指数构建及策略回测

1. VIX指数 VIX 最初被设计出来的目的是为了预警市场的潜在风险&#xff0c;一般来说&#xff0c;当 VIX 指数小于 15 时&#xff0c;表示市场出现非理性繁荣&#xff1b;当 VIX 指数大于 40 时&#xff0c;表示市场对 未来的非理性恐慌&#xff0c;短期内可以出现反弹。VIX 指…

非标设计之气缸概述

气缸的组成&#xff1a; 气缸的分类 单作用气缸&#xff1a; 活塞仅一侧供气&#xff0c;气压推动活塞产生推力伸出&#xff0c;靠弹簧或自重返回。 双作用气缸&#xff1a; 气缸活塞两侧都有气压力&#xff0c;来实现前进或后退动作。 气缸的缓冲 但是&#xff0c;气缸也…

matlab 基于卡尔曼滤波的GPS-INS的数据融合的导航

1、内容简介 略 25-可以交流、咨询、答疑 2、内容说明 基于卡尔曼滤波的GPS-INS的数据融合的导航 "基于卡尔曼滤波的GPS-INS的数据融合的导航 基于卡尔曼滤波实现GPS-INS组合导航系统" 卡尔曼滤波、GPS、INS、数据融合、导航 3、仿真分析 4、参考论文 略 …

2_企业级Nginx使用-day1

#企业级Nginx使用-day1 学习目标和内容 1、能够了解Nginx的信号参数 2、能够进行平滑升级Nginx 3、能够配置server虚拟机 4、能够部署上线项目到LNMP架构中 5、能够了解Nginx的常用官方模块 6、能够了解日志相关使用 一、重装和升级 在实际业务场景中&#xff0c;需要使用软件…

C++函数模板,类模板

C函数模板&#xff0c;类模板 1.函数模板1.1函数模板的概念1.2函数模板的格式1.3函数模板的原理1.4函数模板的实例化1.5模板参数的匹配原则 2.类模板2.1类模板的定义格式2.2类模板的实例化 1.函数模板 1.1函数模板的概念 在C中&#xff0c;函数模板是一种通用的函数定义&…

C语言--求一个十进制整数中1的个数

一.题目描述⭐ 求一个十进制整数中1的个数 比如&#xff1a; 输入:10201 输出&#xff1a;2 &#xff08;这个数字中1的个数是2&#xff09; 二.思路分析⭐ 数字类的问题我们可以用取模&#xff0c;或者取余运算。 首先定义一个计数器&#xff0c;用来统计1的个数。 输入数字…