一、HTML与JavaScript自解码机制

JavaScript代码出现在HTML标签内,意味着这段JavaScript可以进行HTML形式的编码,这种编码有以下两种:

  • 进制编码:&#xH;(十六进制格式)、&#D;(十进制格式),最后分号可以不要。
  • HTML实体编码。

在JavaScript执行之前,HTML形式的编码会自动解码。

如下:

<input type="button" id='exec_btn' value='exec' onclick="document.write('<img src=@   onerror=alert(123)  />')" />等同于:<input type="button" id='exec_btn' value='exec' onclick="document.write('&lt;img src=@   onerror=alert(123)  /&gt;')" />等同于:
<input type="button" id='exec_btn' value='exec' onclick="document.write('<img src=@   onerror=alert(123) />')" /

如果用户输入出现在<script>标签里的JavaScript中,需要遵循JavaScript编码,有如下几种形式:

  • Unicode形式:\uH(十六进制)。
  • 普通十六进制:\xH。
  • 纯转义:\'、\"、\<、\>这样在特殊字符之前加\进行转义。
<input type="button" id='exec_btn' value='exec' />
<script>
var obtn = document.getElementById('exec_btn')
obtn.onclick = function() {document.write('\u003c\u0069\u006d\u0067\u0020\u0073\u0072\u0063\u003d\u0040\u0020\u0020\u0020\u006f\u006e\u0065\u0072\u0072\u006f\u0072\u003d\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0032\u0033\u0029\u0020\u002f\u003e')//document.write('<img src=@   onerror=alert(123) />')
}
</script>

二、浏览器进制常识

在浏览器常用的进制混淆有八进制,十进制和十六进制。

HTML属性最常用的属性为十进制和十六进制。十进制在HTML中使用8来表示,用&和#作为前缀,中间为十进制数字,以(;)结尾,也可以没有。如果十六进制则用Z表示,比十进制多了x,进制码也多了a~f字符来表示。x,a-f这几个字符对大小写不敏感。

CSS中也只能用到十进制和十六进制,CSS兼容HTML中的进制表示形式,十六进制还可以使用\6c形式表示,用斜线作为进制数值表示。

JavaScript中eval执行的字符串有八进制和十六进制分别用\56与\x5c表示。但是不能直接给诸如汉字的多字节编码,只能使用Unicode编码。

JavaScript自身带有两个函数可以进行进制编码与解码:char.toString(jinzhi)、String.fromCharCode(code, jinzhi)。

三、浏览器编码常识

在JavaScript中有三套编码解码函数,分别为:

escape/unescape

encodeURI/decodeURI

encodeURIComponent/decodeURIComponent

escape不编码的字符有69个:
*、+、-、.、/、@、_、0~9、a~z、A~Z
而且escape对0~255以外的unicode值进行编码时输出 %u**** 格式。encodeURI不编码的字符有82个:
!、#、$、&、'、(、)、*、+、,、-、.、/、:、;、=、?、@、_、~、0~9、a~z、A~ZencodeURIComponent不编码的字符有71个:
!、'、(、)、*、-、.、_、~、0~9、a~z、A~Z

除了JavaScript提供的这三种加密解密方法,我们还需要了解HTMLEncode、URLEncode、JSEncode、UTF-7编码、Base64编码

编码解码在线工具:http://www.ofmonkey.com/encode/unicode

浏览器进制及编码常识相关推荐

  1. Python学习笔记---day04进制和编码

    day04进制和编码 课程目标:讲解计算机中一些必备的常识知识,让学员了解一些常见名词背后的含义(重在理解) 课程概要: python代码的运行方式 进制 计算机的单位 编码 1. Python代码运 ...

  2. 轩小陌的Python笔记-day04 进制和编码

    day04 进制和编码 课程目标:讲解计算机中一些必备的常识知识,让大家了解一些常见名词背后的含义(重在理解,今天不写代码). 课程概要: python代码的运行方式 进制 计算机中的单位 编码 1. ...

  3. 高中信息技术——进制与编码刷题点整理

    前言:进制与编码是信息技术最基础最入门的知识点. 1. 进制转换   人类目前最常用的进制是十进制,很大可能也是跟人的手指有10根相关,人类可以简单的区分10中不同的数字.但是对于计算机来说,很多都是 ...

  4. bch verilog代码_基于FPGA的多进制BCH编码

    标签:编码(180)RS(99) 摘要:RS(Reed-Solomon)编码是一种具有较强纠错能力的多进制BCH编码,其既可纠正随机错误,又可纠正突发错误.RS编译码器广泛应用于通信和存储系统,为解决 ...

  5. 【计导非课系列】 第五节 二进制 进制计算 编码

    [计导非课系列] 第五节 二进制 进制计算 编码 对于计算机来说,数字只有两个--0和1. 数据对于计算机来说是相当重要的,而电路的通断两种状态决定了计算机只能通过1和0来进行一切事情的处理.所以,我 ...

  6. 前端开发 html第二课 自结束标签 注释 标签中的属性 文档声明 进制 字符编码 文档使用 VScode 实体 meta标签 语义化标签 块元素和行内元素 布局标签

    1 自结束标签 标签一般成对出现,但是也存在一些自结束标签 如: 多"/"和没有"/"区别不大 2 注释 注释的作用: 注释中的内容会被浏览器忽略,不会在网页中 ...

  7. 计算机中的进制和编码

    古时候,人们是如何来传递消息的? 当年周幽王为博褒妃一笑,不顾众臣反对,竟数次无故点燃边关告急用的烽火台,使各路诸侯,长途跋涉,匆忙赶去救驾. 结果,被戏而回. 周幽王从此便失信于诸侯,最后,当边关真 ...

  8. 代码,绘画,设计常用的颜色名称-16进制HEX编码-RGB编码 对照一览表

    排列方式,英文名称的字典序 颜色名 HEX16进制编码 RGB编码 AliceBlue F0F8FF 240,248,255 AntiqueWhite FAEBD7 250,235,215 Aqua ...

  9. Python3小程序:把连续的16进制UTF8编码转换为字符串

    # coding: utf-8 ''' 参考用 mystery = b"\xe5\x88\xab" x = mystery.decode('utf-8') print(x)y = ...

最新文章

  1. 我和学员那些事儿——涅槃重生的背后
  2. [原]我装Solaris的艰苦经历
  3. linkedin总共能加30000个好友
  4. 基于RESTful标准的Web Api
  5. 身为DATASHUO大数据工程师,我亲手制作的2016年第一期数据报告
  6. Ubuntu 18.04安装NVIDIA(英伟达) RTX2080Ti显卡
  7. targetFilterLifecycle的作用
  8. 基于深度学习的自动化行人检测和监控系统
  9. react Hook useEffect()
  10. PCL学习笔记(20)——remove_outliers
  11. 无限乱斗哪个服务器有,《LOL》国服无限乱斗什么时候出 国服2020无限乱斗上线时间...
  12. 电脑显示更改默认服务器如何选择,电脑设置服务器在哪里设置
  13. 英语单词记忆 词源法-思维导图(05)词源prehend/prehens-30
  14. 怎么把图片按12345....顺序排列
  15. 字符串——删除字符串中的大写字母
  16. 《iOS开发完全上手——使用iOS 7和Xcode 5开发移动与平板应用》之Objective-C
  17. 如何将硬盘的分区大小设置为整数
  18. 洛谷P1118 [USACO06FEB]数字三角形Backward Digit Su…
  19. 数学物理方程学习笔记1
  20. amd处理器更新zen4服务器芯片,AMD将公布Zen4/Genoa处理器 有望升级到128核

热门文章

  1. 总冠军-克里夫兰骑士
  2. c语言结构体定义坐标,C语言结构体定义的方法汇总
  3. OkHttp3简介和使用详解
  4. android 跑windows软件,一些Android平板即将可以运行Windows应用程序
  5. 北京地铁8-6号线换乘的改进
  6. 如何给微信公众号测试号设置自定义的菜单
  7. 页面性能:如何系统地优化页面?
  8. 移动硬盘出现参数错误,无法访问的问题
  9. 2017年2月17日
  10. 微信小程序动漫论坛平台+后台管理系统SSM-JAVA【数据库设计、论文、源码、开题报告】