XSS基础知识

声明:本文章仅做技术交流,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关,如有不妥请联系本人删除。

XSS概述

产生原因

XSS漏洞产生的主要原因是由于程序对输入和输入的控制不够严格,导致构建的恶意代码输入后,在前端浏览的时候被当作有效的代码解析执行从而产生危害。

危害

1)网络钓鱼,盗取各种用户账户。 2)窃取用户的cookies资料,从而获取用户隐私信息。 3)弹出广告页面,获取相关利益。 4)劫持用户会话,执行任意操作。 5)传播蠕虫病毒

 XSS分类

反射型

反射型XSS是将用户输入的内容作为代码让浏览器对其进行执行达到攻击的目的,一般需要引诱用户访问攻击者构建的URL。这种类型的攻击指发生在客户端上,并且需要访问带有恶意的参数特制的URL,所以也称之为非持久型XSS。

存储型

存储型XSS是将攻击脚本永远嵌入某一个页面中,当用户访问的时候就会触发执行,从而用户受到相关的攻击。并且该类型的攻击主要发生在服务端,所有用户访问该页面都将受到相应的攻击,所以也称之为持久型XSS。

DOM型

不经过后端,仅仅是通过网页本身的JavaScript进行渲染触发的。

DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的。

基于DOM型的XSS漏洞是不需要与服务器端交互,它只发生在客户端处理数据的阶段。

前置知识

xss注入主要利用的是html的代码内容。

还有一些特殊的伪协议的利用。

如果看不懂就去找相应的前置知识查看学习。

xss攻击

常用标签

<script>

<scirpt>alert("xss");</script>

<img>

图片加载错误时触发示例:<img src="x" onerror=alert(1)>
鼠标指针移动到元素时触发示例:<img src=1 onmouseover="alert(1)">
鼠标指针移出时触发示例:<img src=1 onmouseout="alert(1")>

<a>

<a href="http://www.qq.com">qq</a>
<a href=javascript:alert('1')>test</a>

<input>

按下按键时触发示例:<input type="text" onkeydown="alert(1)">
按下按键时触发示例:<input type="text" onkeypress="alert(1)">
松开按键式时触发示例:<input type="text" onkeyup="alert(1)">
竞争焦点,从而触发onblur事件示例:<input onblur=alert("xss") autofocus><input autofocus>

<style>

<style οnlοad=alert(1)></style>

协议

伪协议:javascript:alert(1)

<a href=javascript:alert(1)>dd</a>

除此之外还有:

http://

ftp://

weixin://

weishi://

dy://

事件型

还有一些事件型的内容,在前面也有穿插:

οnerrοr=alert(1) 加载图片失败

οnlοad= 加载成功

οninput= 当框有输入的时候才会触发

οnclick=点击

οnfοcus=对象获得焦点

攻击流程

xss的攻击流程就是在输入框注入合理的内容,然后进行触发拿到想要的内容。

绕过

关键字

在网站或者waf中,可能都会对xss的关键攻击内容进行黑白名单的处理,会禁掉一些如input、JavaScript的特殊内容,这里就涉及到了一些绕过手法:

大小写绕过

        html对于大小写不敏感,可以利用大小写混淆过去。

双写绕过

        如:<input oonnfocus="alert('xss');">

空格、回车、tab绕过

        空格示例:<img src="javascript:alert('xss');">替换为:<img src="java script:alert('xss');">

注释绕过

        示例:<script>alert()</script>替换为:<scri<!--2-->pt>alert()</sc<!--8-->ript>

字符拼接

       

示例:

  <img src="x" οnerrοr="a=aler;b=t;c='(xss);';eval(a+b+c)">

利用top

  示例:

  <script>top"al"+"ert";</script>

编码绕过

  Unicode编码

        示例:<img src="javascript:

        &#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#1

        15;&#39;&#41;&#59;">

  url编码

        <img src="javascript:

%61%6C%65%72%74%28%22%78%73%73%22%29%3B;">

  ascii编码

  base64编码

url

遇到过滤url时,也可使用以下的方式对url进行绕过:

1、url编码绕过

        如:

        <img src="x" οnerrοr=

        document.location=

        'http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/'>

2、ip地址绕过

单双引号

当过滤的是单引号、双引号时,可以使用JavaScript伪协议绕过,具体使用方法前面有写,这里就不赘述了。

<>

当网站使用escape()函数时:函数不会对数字、字母和* @ - _ + . / 进行编码,但其他所有的字符都会被转义序列替换,因此这里只能自己构造闭合

';alert(1);'

xss防御

对用户输入的内容及访问的URL进行过滤,对输出内容进行编码,简单来说就是将用户提交的所有内容都进行过滤,排除关键字,敏感内容,对URL的参数也进行一定的过滤,并且对动态输出到页面的内容进行html编码,转换为html实体,使其用户输入的恶意代码无法在浏览器中执行。

具体方法有:

对内容进行黑白名单的过滤

使用http only属性,限制客户端js脚本获取cookie信息

控制输入内容的长度

明确输入内容过滤不合理内容

什么是http-only? HttpOnly是包含在http返回头Set-Cookie里面的一个附加的flag,所以它是后端服务器对cookie设置的一个附加的属性,在生成cookie时使用HttpOnly标志有助于减轻客户端脚本访问受保护cookie的风险(如果浏览器支持的话) 通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击。

大多数XSS攻击都是针对会话cookie的盗窃。后端服务器可以通过在其创建的cookie上设置HttpOnly标志来帮助缓解此问题,这表明该cookie在客户端上不可访问。

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

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

相关文章

如何通过生成式AI增强人类的创造力

如何通过生成式AI增强人类的创造力 概述&#xff1a; 生成式AI&#xff08;人工智能&#xff09;&#xff0c;能创建新的文本、图像和视频内容&#xff0c;不仅仍有成为取代许多工作岗位的潜力&#xff0c;但其最大的机遇在于增强人类创造力&#xff0c;助力商业和政府克服创新…

如何用saga实现分布式事务?

SAGA事务介绍 SAGA事务模式的历史十分悠久&#xff0c;比分布式事务的概念提出还要更早。SAGA的意思是“长篇故事、长篇记叙、一长串事件”&#xff0c;它起源于1987年普林斯顿大学的赫克托 加西亚 莫利纳&#xff08;Hector Garcia Molina&#xff09;和肯尼斯 麦克米伦&a…

【48天笔试强训】day12

二进制插入 描述 给定两个32位整数n和m&#xff0c;同时给定i和j&#xff0c;将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零&#xff0c;且m的二进制位数小于等于i-j1&#xff0c;其中二进制的位数从0开始由低到高。 测试样例&#xff1a; 1024&…

phpstudy搭建简单渗透测试环境upload-labs、DVWA、sqli-labs靶场

好久没有做渗透相关的试验了&#xff0c;今天打开phpstudy发现很多问题&#xff0c;好多环境都用不了&#xff0c;那就卸载重装吧&#xff0c;顺便记录一下。 小皮下载地址&#xff1a; https://www.xp.cn/download.html 下载安装完成 一、下载搭建upload-labs环境 github…

【微信小程序生命周期详细介绍】

微信小程序生命周期详细介绍 1. 介绍2. App生命周期3. 页面生命周期 1. 介绍 微信小程序的生命周期主要涉及全局App实例和各个页面&#xff0c;每个小程序都有自己的生命周期&#xff0c;会依次触发特定的生命周期函数。 2. App生命周期 onLaunch&#xff1a;当小程序初始化完…

SpringBoot3框架,Web开发(下)

模板引擎 由于 SpringBoot 使用了嵌入式 Servlet 容器。所以 JSP 默认是不能使用的。如果需要服务端页面渲染&#xff0c;优先考虑使用 模板引擎。 Thymeleaf Thymeleaf 是一个现代的服务器端 Java 模板引擎&#xff0c;适用于 Web 和独立 环境 格式&#xff1a; <!DOCTY…

训练YOLOv8m时AMP显示v8n

在训练Yolov8模型时&#xff0c;使用AMP&#xff08;Automatic Mixed Precision&#xff09;可以加速训练过程并减少显存的使用。AMP是一种混合精度训练技术&#xff0c;它通过将模型参数的计算转换为低精度&#xff08;如半精度&#xff09;来提高训练速度&#xff0c;同时保持…

文献阅读及笔记

每个阶段&#xff0c;该看什么文献 当我们刚开始接触课题时&#xff0c;对这个研究方向一无所知&#xff0c;可以选择硕博学位论文、领域大牛的文献综述当我们已经对课题有了解&#xff0c;处于深化认识的阶段&#xff0c;可以选择行业最新的论文&#xff0c;领域大牛的文献综…

一种动态联动的实现方法

安防领域中的联动规则 有安防领域相关的开发经历的人知道&#xff0c;IPCamera可以配置使能“侦测”功能&#xff0c;并且指定仅针对图像传感器的某个区载进行侦测。除了基本的“移动侦测"外&#xff0c;侦测的功能点还有细化的类别&#xff0c;如人员侦测、车辆侦测、烟…

《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)

1.简介 我们在实际工作中&#xff0c;有可能遇到有些web产品&#xff0c;网页上有一些时间选择&#xff0c;然后支持按照不同时间段范围去筛选数据。网页上日历控件一般&#xff0c;是一个文本输入框&#xff0c;鼠标点击&#xff0c;就会弹出日历界面&#xff0c;可以选择具体…

upload文件上传漏洞复现

什么是文件上传漏洞&#xff1a; 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马&#xff0c;病毒&#xff0c;恶意脚本或者WebShell等。“…

c语言的指针函数和函数指针的区别

指针函数是一个返回指针的函数。它的声明类似于普通函数&#xff0c;但是返回类型是指针类型而不是普通的数据类型。指针函数可以用来返回数组、结构体、对象等复杂的数据类型。 指针函数的定义和使用方式与普通函数类似&#xff0c;可以通过调用函数名来执行函数&#xff0c;…

Qt入门之概述

1.1 介绍 Qt&#xff1a;它是一套基于C的跨平台开发框架&#xff0c;包括GUI、字符串、多线程处理、文件IO、网络IO、3D渲染等时间&#xff1a;它诞生于1991年&#xff0c;由Haavard Nord和Eirik Chambe-Eng共同缔造发展&#xff1a;历经Qt Company、Nokia、Digia多个公司开发…

Seata 2.x 系列【9】事务会话存储模式

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 存储模…

在linux上发起get和post请,怎么写

获取用户 curl --location --request GET http://127.0.0.1:8888/API/UserService/GetUserInfo?&token123456789&userId66666666 下面接口参数两部分&#xff0c;url传参和body 新增用户 curl --location --request POST http://127.0.0.1:8888/API/UserService/AddUs…

ubuntu安装docker的详细教程

检查卸载老版本docker ubuntu下自带了docker的库&#xff0c;不需要添加新的源。 但是ubuntu自带的docker版本太低&#xff0c;需要先卸载旧的再安装新的。 注&#xff1a;docker的旧版本不一定被称为docker&#xff0c;docker.io 或 docker-engine也有可能&#xff0c;所以卸…

springboot RocketMQ 客户端 日志配置 rocketmq_client.log过大

项目集成rocketMQ后&#xff0c;日志持续增大&#xff0c;导致磁盘空间逐渐减少&#xff0c;参考官方文档 来正确配置。 打印客户端日志 RocketMQ 的 TCP Java SDK 基于 SLF4J 接口编程。 JavaSDK1.7.8.Final 版本及以上 RocketMQ 的 Java SDK 1.7.8.Final 已内置了日志实现&…

有关整数和浮点数在内存中存储

1. 整数在内存中的存储 整数的2进制表⽰⽅法有三种&#xff0c;即原码、反码和补码 三种表⽰⽅法均有符号位和数值位两部分&#xff0c;符号位都是⽤0表⽰“正”&#xff0c;⽤1表⽰“负”&#xff0c;⽽数值位最 ⾼位的⼀位是被当做符号位&#xff0c;剩余的都是数值位。 正…

常用芯片学习——BME280芯片

BME280 温湿度气压传感器 芯片介绍 BME280是基于成熟传感原理的组合数字湿度、压力和温度传感器。该传感器块采用极为紧凑的金属盖LGA封装&#xff0c;占地面积仅为2.5x2.5mm2&#xff0c;高度为0.93mm。该传感器提供I2C以及SPI接口。它的小尺寸和低功耗允许在电池驱动的设备…

TCP-IP 知识汇总

开放式系统互联模型------国际化标准组织ISO提出----协议组&#xff08;协议模型&#xff09; 应用层&#xff1a;接收用户数据&#xff0c;人机交互的接口 表示层&#xff1a;将编码转换为二进制&#xff08;加密、解密&#xff09;---统一格式 会话层&#xff1a;针对传输…