web安全---浏览器解析提交数据的过程

解码规则

  1. html解析器对html文档进行解析,完成解析并创建DOM树
  2. JavaScript或者CSS解析器对内联脚本进行解析,完成js、css解码
  3. url解码会根据url所在的顺序不同而在JS解码或者解码后

解码顺序

html解析第一步执行,而JS解析和URL解析则要根据情况而定

HTML解析器

1、html解析器以状态机的方式运行

状态流程图为:
在这里插入图片描述
即:Data—》Tag open----》Tag name —》Data

注意:如果我们的标签是在Data状态下被解析出来的,那么标签将作为一种文本输出来,
举例:<p>Hello<p>
初始状态为Data state ,当遇到<时,状态转为 Tag open,读取a-z某个字符创建开始标签,然后状态变为Tag name ,知道读取到>,状态变为Data,接着读取到H会识别并生成一个字符,相应得会为Hello中的每个字符生成一个字符符号,之后遇到<,又变为Tag open,读取到/则会创建一个闭合标签,并将状态改为Tag name,直到遇到>,后回到Data state。

注意:HTML解析器处于Data State、RCDATA State 、Attribute Value State(属性值),字符实体会被解码为对应的字符

2、原始文本元素

特性:该元素标签中的实体不会被HTML解码
标签:script,style
举例:标签中的实体字符不会被html解码,因此不会执行js

<script>alert&#40;&#49;&#41;</script>
3、RCDATA 元素

特性:html解析器遇到该元素标签时,会进入RCDATA状态,实体字符会被解析器解码
标签:textarea、title
举例:字符实体会被解码,但是不会执行JS,因为没有进入Tag open状态,其中<script>不会被解释为HTML标签

<textarea>&lt;script&gt;alert&#40;&#49;&#41;&lt;/script></textarea>
解码得到<textarea><script>alert(1)</script></textarea>

JavaScript解析器

JavaScript中有三个地方可以出现JS编码
1、字符串

<script>alert(“\u0031);</script>
被编码的为1且是字符串,可以正常解码并触发执行

2、标识符

<script>\u0061\u006c\u0065\u0072\u0074(1);</script>
被编码的部分为alert字符,是函数名,属于在标识符中的情况,因此会被正常解码并执行JS

3、控制符
包含:单引号、双引号、括号等
特性:能被解码但不会解释为控制字符,即失去特殊意义,只会被当做标识符或字符串的一部分

<script>alert\u0028″xss”);</script>
\u0028会被解码为( 但是不会触发JS,因为是控制符

URL解析器

1、URL的协议部分必须为ASCII字符、否则URL解析器的状态机将进入No Scheme状态

<a href="%6a%61%76%61%73%63%72%69%70%74:alert(1)"></a>
url编码部分为javascript,因为作为协议部分的"javascript"被编码,故不会触发JS

2、url中的符号不能被以任何形式编码

<a href="javascript%3aalert(1)"></a>
:被url编码为%3a,导致url状态机进入No Scheme状态,故不会触发JS

3、当javascript没有被编码时

<a href = "javascript:alert(3)">hhhhh<a>

JS编码:

<a href="javascript:\u0061\u006c\u0065\u0072\u0074(3)">hhhhhh</a>

再对JS编码来一个URL编码

<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(3)">hhhhhh</a>

这个是可以成功执行的,当HTML解析到href时,交给URL处理,URL发现了javascript:,把后面的数字解码后交由JavaScript处理,所以会弹出

例子

<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">hhhh</a>
URL encoded "javascript:alert(1)"	//冒号(:)没有被编码
Answer: The javascript will NOT execute.

HTML没有编码,不用考虑,根据href,URL模块处理,但是协议没办法识别(即编码的JavaScript:),URL会解码出来,但JS不会被执行,所以url编码的XSS,javascript:一定不能被url编码,编码后无法识别,js还是不能执行

在这里插入图片描述

<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">
Character entity encoded "javascript" and URL encoded "alert(2)"
Answer: The javascript will execute

HTML先解码得到:

<a href="javascript:%61%6c%65%72%74%28%32%29">

href中为URL,URL模块可识别为javascript协议,进行URL解码,得到

<a href="javascript:alert(2)">

由于是javascript协议,解码完给JS模块处理,于是被执行

<div>&#60;img src=x οnerrοr=alert(4)&#62;</div>
Character entity encoded < and >
Answer: The javascript will NOT execute.

当HTML解析到&#60;时,此时的状态为Data,会被解码,但是不能创建img标签,因为不是Tag open状态,所以解码后被当做文本,不会执行

<button onclick="confirm('7&#39;);">Button</button>
Character entity encoded '
Answer: The javascript will execute.

这里onclick中为标签的属性值,会被HTML解码,得到

<button onclick="confirm('7');">Button</button>

然后被执行

<button onclick="confirm('8\u0027);">Button</button>
Unicode escape sequence encoded '
Answer: The javascript will NOT execute.

不需要HTML解码,onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示,'显然不行,JS执行失败。

<script>&#97;&#108;&#101;&#114;&#116&#40;&#57;&#41;&#59</script>
Character entity encoded alert(9);
Answer: The javascript will NOT execute.

不会被执行,script属于原始文本元素(Raw text elements),只可以容纳文本,注意没有字符引用,于是直接由JS处理,JS也认不出来,执行失败

参考链接

https://blog.csdn.net/baidu_38844729/article/details/109328472
https://xz.aliyun.com/t/5863

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

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

相关文章

利用POI创建OpenOffice中的Excel文件

之所以称为OpenOffice的Excel文件,我发现了一个特点就是: 一些网站严格限定了文件必须为MS的Excel格式的话,用POI的HSSF创建的Excel就会不识别.不知道是什么原因,可能是版本的问题,据说HSSF(令人讨厌的电子表格格式)生成的是MS97的格式.但是97-2003的提示中明显的说明了MS的lib…

web安全-----CSRF漏洞

简述 CSRF&#xff1a;Cross-site request -forgery&#xff0c;跨站请求伪造&#xff0c;是一种web攻击方式&#xff0c;是由于网站的cookie在浏览器中不会过期&#xff0c;只要不关闭浏览器或者退出登录&#xff0c;那以后只要访问这个网站&#xff0c;都会默认你已经登录。…

依赖、关联、聚合、组合还有泛化的关系(转载)

依赖、关联、聚合、组合还有泛化的关系 此文为转载文章:http://zjzkiss.cnblogs.com/世界是普遍联系的&#xff0c;因此程序世界中的类&#xff0c;也不可能是孤立的。UML为我们定义了它们之间的关系&#xff0c;就是&#xff1a;依赖、关联、聚合、组合还有泛化。 泛化关系比…

web安全---SSRF漏洞

简介 SSRF&#xff1a;服务器请求伪造&#xff0c;是一种攻击者构造形成由服务端发起请求 的一个安全漏洞。一般情况下&#xff0c;SSRF攻击的目标是从外网无法访问的内部系统&#xff08;正是因为它是由服务端发起的&#xff0c;所以它能够请求到与它相连而与外网隔离的内部系…

OD使用

0x01 功能界面 序号1是汇编代码对应的地址窗口序号2是汇编对应的十六进制机器码窗口序号3是反汇编窗口序号4是反汇编代码对应的注释信息窗口序号5是寄存器信息窗口序号6是当前执行到的反汇编代码的信息窗口序号7是数据所在的地址序号8是数据的十六进制编码信息&#xff0c;序号…

Java——集合的概述

* A&#xff1a;集合的由来* 数组是容器&#xff0c;集合也是容器* 数组的弊端&#xff1a;数组的长度是固定的&#xff0c;当添加的元素超过了数组的长度时&#xff0c;需要对数组重新定义&#xff0c;太麻烦* Java内部给我们提供了集合类&#xff0c;可以存储任意对象&#x…

排序算法中平均时间复杂度_操作系统中的作业排序(算法,时间复杂度和示例)...

排序算法中平均时间复杂度作业排序 (Job sequencing) Job sequencing is the set of jobs, associated with the job i where deadline di > 0 and profit pi > 0. For any job i the profit is earned if and only if the job is completed by its deadline. To complet…

python---文件处理

0x01 打开一个文件 python中内置了文件对象&#xff0c;通过open()函数就可以制定模式打开指定文件&#xff0c;并创建文件对象。该函数的格式如下&#xff1a; open(file[,moder[,buffering-1]])file&#xff1a;指定要打开或创建的文件名称&#xff0c;如果该文件不存在当前…

简易而又灵活的Javascript拖拽框架(四)

一、开篇 似乎拖拽已经被写烂了&#xff0c;没得写的了&#xff0c;可是我这次又来了&#xff5e; 上一次写的是跨列拖放&#xff0c;这次我要带给大家的是跨页拖放。 可以到这里来看看效果&#xff1a;示例效果 说明&#xff1a;1、如果将方框拖动到页签上立刻释放掉的话&…

python---异常处理结构

python中提供了很多不同形式的异常处理结构&#xff0c;其基本思路都是先尝试执行代码&#xff0c;再处理可能发生的错误。 try…except… 在python异常处理结构中&#xff0c;try…except…使用最为频繁&#xff0c;其中try子句中的代码块为可能引发异常的语句&#xff0c;e…

python---Socket编程

Sockte是计算机之间进行网络通信的一套程序接口&#xff0c;相当于在发送端和接收端之间建立一个通信管道。在实际应用中&#xff0c;一些远程管理软件和网络安全软件大多数依赖于Socket来实现特定功能&#xff0c;由于TCP方式在网络编程中应用非常频繁&#xff0c;此处将对TCP…

(X)HTML嵌套规则

本文整理于互联网~ 简单认识了块元素和内嵌元素以后&#xff0c;下面就可以罗列 XHTML 标签的嵌套规则了&#xff1a; 1. 块元素可以包含内联元素或某些块元素&#xff0c;但内联元素却不能包含块元素&#xff0c;它只能包含其它的内联元素&#xff1a;<div><h1>&…

ASP.NET Web API 处理架构

这篇文章主要是介绍ASP.NET Web API的处理架构&#xff1a;当一个HTTP请求到达直到产生一个请求的过程。ASP.NET Web API 的处理架构图如下&#xff0c;主要有三层组成&#xff1a;宿主&#xff08;hosting&#xff09;&#xff0c;消息处理管道&#xff08;message handler pi…

python---可执行文件的转换

pyinstaller是常见的执行文件打包工具。该工具的安装方式非常简单&#xff0c;可运行在windows、MacOS X和GNU/Linux操作系统环境中&#xff0c;执行python2和python3。 用pyinstaller打包的执行文件&#xff0c;只能在于执行打包操作的系统类型相同的环境下运行。也就是说&…

数组排序最小复杂度_进行排序的最小缺失数

数组排序最小复杂度Problem statement: 问题陈述&#xff1a; Given an array of n integers. Find the minimum number of elements from the array to remove or delete so that when the remaining elements are placed in the same sequence order form a sorted sequence…

轻松掌握Windows窗体间的数据交互(转载)

轻松掌握Windows窗体间的数据交互作者&#xff1a;郑佐日期&#xff1a;2004-04-05Windows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET Framework 的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集&#xff0c;它使您得以开发丰富的 Windows 应用程序…

python免杀技术---shellcode的加载与执行

0x01 生成shellcode 首先通过下列命令生成一个shellcode&#xff0c;使用msfvenom -p选项来指定paylaod&#xff0c;这里选用windows/x64、exec模块接收的参数。使用calc.exe执行弹出计算器的操作。-f选项用来执行生成的shellcdoe的编译语言。 msfvenom -p windows/x64/exec …

Qt中QTableWidget用法总结

QTableWidget是QT程序中常用的显示数据表格的空间&#xff0c;很类似于VC、C#中的DataGrid。说到QTableWidget&#xff0c;就必须讲一下它跟QTabelView的区别了。QTableWidget是QTableView的子类&#xff0c;主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先…

[转]软件架构师书单

"其实中国程序员&#xff0c;现在最需要的是一张安静的书桌。"&#xff0c;的确&#xff0c;中国架构师大多缺乏系统的基础知识&#xff0c;与其自欺欺人的宣扬"读书无用&#xff0c;重在实践变通&#xff0c;修身立命哲学书更重要"&#xff0c;把大好时间…

python免杀技术---复现+改进----1

0x01 复现 复现文章&#xff1a;https://mp.weixin.qq.com/s?__bizMzI3MzUwMTQwNg&mid2247484733&idx2&sn5b8f439c2998ce089eb44541d2da7a15&chksmeb231%E2%80%A6 首先用cobaltstruke生成一个python的payload脚本 然后复制里面的payload进行Base64编码&…