IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 2021-09-04 -> 正文阅读

[JavaScript知识库]2021-09-04

                       **编码之详细剖析**

Unicode编码
ISO(国际标准化组织)指定包括地球上所有文化、所有字母和符号的编码,使用两个字节表示一个字符,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

具体存储就由:UTF-8、UTF-16等实现。

Unicode编码我们就简单称其为JavaScript编码。

&#x、\u都可以用来表示一串Unicode编码。(可以记住这种标识)
以下我用"test"这个单词来举例编码(我在后面备注了是哪种编码):

\u0074\u0065\u0073\u0074 (Javascript编码也是Unicode编码)
&#x0074 &#x0065 &#x0073 &#x0074 (Javascript编码也是Unicode编码)
&#x74 &#x65 &#x73 &#x74 (Javascript编码也是Unicode编码)
&#116 &#101 &#115 &#116(HTML实体编码)
%74%65%73%74 (URL编码)

第一、二、三个都有&#x、\u这种相关字,所以就是Javascript编码,也是Unicode编码。而第四个一般是做XSS脚本容易被实体编码防止XSS攻击,举例:alert(1),这样一个弹窗js如果被实体编码,左尖括号和右尖括号都会被编码成&lt、&rt。最后一个比较常见,地址栏中发起请求时,url会被编码,做过sql注入就知道。

接下来详细说一下各种解码:
HTML解码
以javascript:alert(1)为例子:
1.未编码:可以弹窗。
2.href中的r进行编码:不会弹出,变成文本文档。(因为这种编码会整个格式的一个解析,导致解析器没办法构建自己的DOM树,没办法编码解析。)
3.javascript中r进行编码:可以弹窗。
4.alert(1)中的r进行编码:可以弹窗。

小结:1,4可以解析,2不可以;所以当1方法被网站waf拦截,可以尝试用4这种方法进行绕过。

URL解码:
同样以javascript:alert(1)为例子:
1.未编码:可以弹窗
2.href中的r进行编码:不可以弹窗。(URL编码破坏了DOM树结构)
3.javascript中r进行编码:不可以弹窗。(URL编码破坏了协议类型)
4.alert(1)中的r进行编码:可以弹窗。

JavaScript编码:
同样以javascript:alert(1)为例子:
1.未编码:可以弹窗
2.href中的r进行编码:不可以弹窗。(DOM树结构被JS编码破坏)
3.javascript中r进行编码:不可以弹窗。(协议类型被JS破坏了)
4.alert(1)中的r进行编码:可以弹窗。
5.alert(1)中的(进行编码:不可以弹窗。(不能对控制字符编码)

在了解了以上三种基础编码之后,得出非常重要的知识点结论:
解码顺序是:JS<URL<HTML
也就是说最先进行HTML解码,再URL解码,最后是JS解码。
原理:当浏览器接收到一个
HTML文档的时候,他要先解析文档本身,然后去构建自己的DOM树结构,构建好之后,对内容第一次解析,解析肯定围绕HTML文档本身展开的,解析HTML编码成功之后,再去解析各个标签的属性,比如a标签,img标签等。这些标签内部可能它有属性是url属性的,这时候会尝试url解码,url里面可能会有伪协议,他最后去执行一个伪协议的解码。所以解码顺序就出来了。

有了上面的理解,接下来说一下二层混淆编码
同样对于javascript:alert(1):
1.alert(1)中的r进行js编码,后url编码:可以弹窗
2.alert(1)中的r进行js编码,后html编码:可以弹窗
3.alert(1)中的r进行url编码,后html编码:可以弹窗

原理:根据解码顺序:JS<URL<HTML,第一个没有HTML编码,只有js和url,先对js编码,再url编码,刚好和解码顺序相反。符合,所以可以弹窗。同理二和三都可以。

最后,来一下三层混淆解码
同样对于javascript:alert(1):
alert(1)中的r进行js编码,后url编码,再html编码:可以弹窗。
原理:编码顺序和解码顺序刚好相反。

最后来做个练习题:
%5Cu006a%5Cu0061%5Cu0076%5Cu0061%5Cu0073%5Cu0063%5Cu0072%5Cu0069%5Cu0070%5Cu0074%5Cu0028%5Cu0032%5Cu0033%5Cu0032%5Cu0033%5Cu0029
将以上编码还原出来:
我们依次做解码,按照解码顺序:JS<URL<HTML。(可以在线搜索网站加解码)
先进行HTML解码:
%5Cu006a%5Cu0061%5Cu0076%5Cu0061%5Cu0073%5Cu0063%5Cu0072%5Cu0069%5Cu0070%5Cu0074%5Cu0028%5Cu0032%5Cu0033%5Cu0032%5Cu0033%5Cu0029
再进行URL解码:
\u006a\u0061\u0076\u0061\u0073\u0063\u0072\u0069\u0070\u0074\u0028\u0032\u0033\u0032\u0033\u0029
在进行JS解码,也就是Unicode解码:
javascript(2323)
完毕!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 10:43:24  更:2021-09-05 10:44:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 20:59:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计