XSS原理

news2024/10/2 6:26:49

原理:

这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动态展示数据功能,在HTML页面里嵌入恶意代码。当用户浏览改页时,这些潜入在HTML中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的,如 cookie窃取等。

主要因为系统对输入或输出的时候控制不够严格,导致攻击者输入精心构造的语句导致浏览器把输入的内容当成了JS代码执行,从而实现js代码的执行。

分类:

数据交互:富文本编辑,标签插入和自定义等位置

数据输出:用户资料,关键词标签说明等页面输入位置

用户输入数据只要在界面显示即可能存在xss跨站脚本攻击

Script标签内        <script>var=‘xxxx’</script>

Html标签内        <img src="x" οnerrοr=alert(1)>

射型:

反射型XSS又称非持久型XSS,其经过后端,不经过数据库,无法持久攻击。反射型xss攻击是一次性的,仅对当次的页面访问产生影响。反射型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。

存储型

存储型XSS又称持久性XSS,因为其内容存储在目标服务器数据库或文件中,可以持久触发。攻击者在论坛、博客、留言板,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发XSS代码。

DOM型:

全称Document Object Model, DOM类型不经过后端,使用DOM动态访问更新文档的内容、结构及样式。服务器响应不会处理攻击者脚本,而是用户浏览器处理这个响应时,DOM对象就会处理XSS代码,触发XSS漏洞。

射型:

正常访问可以看到如下源代码信息,此时会把username参数like打印到前端,此时后台未进行任何过滤和编码:

可以看到当我们输入<script>标签即可执行js代码,当我们未设置安全属性httponly,可以获取cookie,进而盗取身份。此时数据经过了后端,但是数据并未存储在数据库或文件中,攻击者只能将url发送给目标,目标访问了才能触发漏洞。

存储型:

漏洞一般存在于留言板等位置,这里我们可以将留言信息修改为js代码:

当我们提交的内容被存储在数据库中时,这样攻击者可以把攻击代码存储在数据库中,这样任何用户只要访问到了这个存在漏洞的网址时,就会触发漏洞执行js代码,危害程度要大于反射型注入攻击:


DOM型:

每个载入浏览器的 HTML 文档都会成为Document对象。Document对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。当我们代码中存在如下DOM属性的时候需要格外注意,如果参数可控则可能存在xss:

可能触发DOM型xss属性:

1. document.referer
2. window.name
3. location
4. innerHTML
5. documen.write 属性

案例场景:

场景一(文本)

当前端输入数据未经任何处理就在页面进行输出,如果数据位于文本区域,则可以直接添加<script>标签添加js语句执行。
防御方式HTML编码

景二标签):

当数据未经处理直接在前台展示则攻击者首先可以使用”>来闭合前面标签变为:<link rel="canonical" href="">

然后就可以插入<script>alert(1)</script>执行js代码然后使用<“闭合后面的”>,防止页面出错。这样就可以插入任意js语句,防御方式HTML编码。

"><script>alert(1)</script><"

景三(标签)

如果代码仅仅是简单的过滤不允许<>符号,但是未过滤”,则攻击者可以在标签中通过闭合之前的事件并添加新的事件,进而执行任意js代码

logo.png“ οnlοad="alert(1)“ “

<img src="logo.png" οnlοad="alert(1)" "/logo.png" width="336" height="36">

场景四(标签) :

如果对”<>进行了过滤,但是可以使用伪协议JavaScript进行绕过,这里可以使用javascript:alert(1)来执行js语句。

所以仅仅对特殊符号过滤还存在风险,所以在编码过程中如果是经过服务器数据然后再前台打印的需要进行html编码操作

场景script

当一些特殊情况前端传入的字符串会出现在<script>标签中,这个时候要使用js编码,不能使用html编码,因为html编码不会对转义符/进行编码,这样攻击者可以使用注释符闭合标签,再通过后面的注入点拼凑出一个js脚本攻击链。

 场景六(DOM):

当存在DOM xss漏洞,此类攻击多数以反射xss为主,此类攻击需要对通过dom事件获取到的内容进行js编码,防止执行js代码

XSS防御:

我们可以使用owasp的htmlencode和jsencode

Encode.forHtml(request.getParameter("username"));
Encode.forJavaScript( request.getParameter("hrefurl") );

htmlencode:

Html编码会将输入字符“,&,<,>,’进行编码,编码为&#34;,&amp;,&lt;,&gt;,&#39;

字符串被编码后浏览器会将其作为字符串解析而不会影响整个html的结构,浏览器显示时会进行解码,所以显示不会受到影响。

但是要注意不能防御标签内的伪协议和DOM类型的xss

JavaScriptencode:

使用html编码不会对\编码,造成后面的”被转义

使用js编码可以对\,/.’,”,等特殊符号进行编码,可以防止前端数据出现在<script>标签中,通过闭合标签或转义等手段执行js代码。

但是要注意没有编码:符号,所以不能防御伪协议执行js代码

特殊情况:

当存在<a>标签,如果其中的href内容可以由前端控制,即便做了html编码也无法防御,因为html编码不会对伪协议进行处理,则需要服务器对内容进行过滤,判断字符串中是否存在javascript:,如果存在则阻止

当存在DOM xss漏洞,则需要在前端js中对dom中获取到的数据进行过滤,可以对获取到的内容进行js编码,或者根据场景对获取的内容进行过滤

总结:

在我们的测试中,任何前端可以被控制的位置都可能存在XSS,所以在测试中要对每一个输入点进行测试,如果过滤不强或者过滤方法错误,则可以根据对应情况进行绕过,这个就要根据实际环境进行测试,下面时我们编写代码的时候需要注意的地方,可以有效防御xss

  1. 当参数的内容需要在前端显示,显示位置如果不在<script>标签中,并且不在<a href>中,则使用html编码
  2. 如果内容需要在<script>脚本中进行拼接,则对获取数据进行js编码,另外如果内容是直接交给eval执行,此类数据需要严格过滤。
  3. 当数据位于<a href>中除了要做html编码外还要对数据进行伪协议过滤,过滤javascript:,防止通过伪协议执行脚本代码
  4. 当注入存在DOM中,则需要对事件获取到的参数进行过滤,可以选择js编码,或者根据实际的场景进行灵活过滤。

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

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

相关文章

串联起深度学习的整体,以及其他领域

1、从模型拟合&#xff08;收敛&#xff09;数据关系出发&#xff1a; 2、f从简单的一层和两层连接开始&#xff0c;发展&#xff1b;被表示成 3、如何判断收敛&#xff1a;,即目标函数 4、如何界定任务&#xff1a;&#xff0c;表示什么&#xff1f;表示什么&#xff1f;&a…

解决ubuntu中没有网络连接的图标

现象&#xff1a;Ubuntu连接网络 在设置中没有显示网络图标 解决方案&#xff1a; 命令为 sudo nmcli networking off sudo nmcli networking on sudo service network-manager restart 重启ubuntu&#xff0c;网络连接完成

[MongoDB]-权限验证管理

[MongoDB]-权限验证管理 senge | 2023年9月 背景说明&#xff1a;现有两套MongoDB副本集群给开发人员使用时未开启认证。 产生影响&#xff1a;用户若输入账号以及密码则会进行校验&#xff0c;但用户可以在不输入用户名和密码的情况下也可直接登录。 倘若黑客借此进行攻击勒索…

nSoftware IPWorks IoT 2022 Java 22.0.8 Crack

物联网库&#xff0c;使用这个轻量级组件库&#xff0c;可以在任何平台上的应用程序中轻松实现物联网 (IoT) 通信协议。 nSoftware IPWorks IoT 最新的 IPWorks IoT 现已推出&#xff01;最新版本的 IPWorks IoT 具有现代化和简化的体验&#xff0c;包括 .NET 中的异步和跨平台…

LeetCode竞赛---第 366 场周赛

Problem: 100103. 分类求和并作差 &#x1f4da; 题目&#xff1a;给你两个正整数 n 和 m 。 现定义两个整数 num1 和 num2 &#xff0c;如下所示&#xff1a; num1&#xff1a;范围 [1, n] 内所有 无法被 m 整除 的整数之和。num1&#xff1a;范围 [1, n] 内所有 无法被 m 整…

OPPO realme 真我 一加 刷机工具下载 ColorOS Upgrade Tool

Download Realme Upgrade Tool for Windows Download ColorOS Upgrade Tool for Windows Realme升级工具是由Realme开发的Windows应用程序&#xff0c;可帮助用户升级其Realme设备上的固件。此工具支持在Realme Ul 3.0或更高版本上运行的Realme 设备。OPPO realme 真我 一加 …

下载安装JRebel插件

settings -> plugis -> JRebel 下载 然后重启idea 激活 现在呢&#xff0c;2023年啦~所以网址得是最先哒~ http://127.0.0.1:8888/{GUID} GUID从下面的网址生成&#xff0c;邮箱随意~ Create GUID online (guidgen.com) LS client not configured. 删除用户文件夹…

C++ | 仿函数

仿函数的用法 在C语言时期&#xff0c;如果想要实现回调函数或者是函数参数需要传入函数&#xff0c;通常是用的函数指针。而在C中&#xff0c;我们一般用仿函数来平替。 仿函数&#xff0c;又叫函数对象。虽然名字叫仿函数&#xff0c;但本质上就是一个重载了 operator() 的类…

金融信创黄金三年:小程序生态+跨端技术框架构建

小程序应用场景生态的发展&#xff0c;受益于开源技术的发展&#xff0c;以及响应快速开发的实际业务需求&#xff0c;一些跨端框架如&#xff1a;Electron、wxPython、FinClip、Tauri、Flutter等发展也非常迅速&#xff0c;小程序生态跨端技术框架&#xff0c;不仅能满足自有超…

Python3操作文件系列(三):OpenPyXl模块三大对象操作Excel文件

Python3操作文件系列(一):判断文件|目录是否存在三种方式 Python3操作文件系列(二):文件数据读写|二进制数据读写 Python3数据文件读取与写入 Python3操作文件系列(三):excel文件读写数据 Python操作Excel的三大对象认知升维&#xff1a; Excel对象模型:excel脚本编程的主要…

Idea热部署插件(JRebel for IntelliJ)激活(适用于内网、外网激活)

一.下载激活需要的Jar包 网盘地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1BYS9rE_3EA_isFfz8ORRDg 提取码&#xff1a;1i0c二.进入到第一步下载的jar目录下&#xff0c;运行cmd并且通过java-jar运行jar包 三.运行jar后&#xff0c;将激活地址复制到idea上&a…

docker基本用法

docker 基础常用命令 导入镜像 方式1 docker import kylin_sp2.tar.xz kylin-build:build-hs-220824方式2 [rootccc64 caojingjing]# cat kylin_sp2.tar.xz | docker import - kylin-build:build-hs-220824 sha256:c02cba7686b88e633eff58cddba3189712cbe7f449f2fd37b2033158a…

【JUC系列-10】深入理解ArrayBlockingQueue的底层原理

JUC系列整体栏目 内容链接地址【一】深入理解JMM内存模型的底层实现原理https://zhenghuisheng.blog.csdn.net/article/details/132400429【二】深入理解CAS底层原理和基本使用https://blog.csdn.net/zhenghuishengq/article/details/132478786【三】熟练掌握Atomic原子系列基本…

什么是研发效能DevOps?研发效能方程式又是什么?

研发效能DevOps是一种理念一个方法&#xff0c;旨在通过优化软件开发、运营和维护的流程&#xff0c;实现高效、高质量、快速的价值交付。 研发效能需要解决的是&#xff1a;如何平衡价值、效率、成本这三者的关系&#xff0c;同时寻求可持续发展。研发效能的目标是持续低成本…

多因素共同作用,行业格局或将发生变化

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 1、政经环境改善&#xff0c;数控机床有望走出寒冬 近年来&#xff0c;国家不断提高对于高端数控机床的扶持力度与关注。长…

高效解决 TypeError : ‘ numpy._DTypeMeta‘ object is not subscriptable 问题

文章目录 问题描述解决问题 问题描述 解决问题 参考博文 打开报错位置 AppData\Roaming\Python\Python39\site-packages\cv2\typing\ 添加single-quotes&#xff0c;即单引号 博主说The trick is to use single-quotes to avoid the infamous TypeError: ‘numpy._DTypeMeta’…

ChatGPT可以用于写留学文书嘛?对留学生有什么影响?

自从4月份ChatGPT4.0发布以后&#xff0c;越来越多的AI工具被应用于我们的日常生活当中&#xff0c;而对于学生来说&#xff0c;尤其是在读的留学生朋友&#xff0c;或多或少都使用过&#xff0c;无论是写文章综述还是项目总结&#xff0c;都有十分出色的效果。 01.ChatGPT 可…

算法题:买卖股票的最佳时机含手续费(动态规划解法贪心解法-详解)

这道题有两种解法&#xff1a;动态规划 or 贪心算法。 贪心算法的提交结果要比动态规划好一些&#xff0c;总体上动态规划的解法更容易想到。&#xff08;完整题目附在了最后&#xff09; 1、动态规划解法 设置两个数&#xff0c;dp[0]表示遍历到股票prices[i]时手里没有股…

SSM整合RabbitMQ,Spring4.x整合RabbitMQ

SSM整合RabbitMQ目录 前言版本实现目录参考pom.xml依赖rabbitmq.properties配置文件spring-rabbitmq.xmlspring-mvc.xml或applicationContext.xmlrabbitmq目录下MessageConsumer.javaMessageConsumer2.javaMessageProducer.javaMessageConstant.java 测试调用 扩展消息重发 前言…

飞桨大模型套件:一站式体验,性能极致,生态兼容

在Wave Summit 2023深度学习开发者大会上&#xff0c;来自百度的资深研发工程师贺思俊和王冠中带来的分享主题是&#xff1a;飞桨大模型套件&#xff0c;一站式体验&#xff0c;性能极致&#xff0c;生态兼容。 大语言模型套件PaddleNLP 众所周知PaddleNLP并不是一个全新的模型…