浏览器进制及编码常识

一、HTML与JavaScript自解码机制

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

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

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

如下:

<input type="button" id='exec_btn' value='exec' onclick="document.write('&#60;&#105;&#109;&#103;&#32;&#115;&#114;&#99;&#61;&#64;&#32;&#32;&#32;&#111;&#110;&#101;&#114;&#114;&#111;&#114;&#61;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#50;&#51;&#41;&#32;&#32;&#47;&#62;')" />

等同于:

<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中使用&#56;来表示,用&和#作为前缀,中间为十进制数字,以(;)结尾,也可以没有。如果十六进制则用&#x5a;表示,比十进制多了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~Z

encodeURIComponent不编码的字符有71个:
!、'、(、)、*、-、.、_、~、0~9、a~z、A~Z

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

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值