舟山外贸建站公司,seo快速排名服务,局域网怎么建设网站,阳江招聘网最新招聘信息网目录
常见编码
一、ASCII码
二、URL编码
三、Unicode编码
四、HTML实体编码
结合编码理解浏览器解析机制 常见编码 一、ASCII码 ASCII (American Standard Code for Information Interchange#xff0c;美国信息交换标准代码#xff09; 计算机内部#xff0…目录
常见编码
一、ASCII码
二、URL编码
三、Unicode编码
四、HTML实体编码
结合编码理解浏览器解析机制 常见编码 一、ASCII码 ASCII (American Standard Code for Information Interchange美国信息交换标准代码 计算机内部所有信息最终都是一个二进制值。每一个二进制位bit有0和1两种状态因此八个二进制位就可以组合出256种状态这被称为一个字节byte。也就是说一个字节一共可以用来表示256种不同的状态每一个状态对应一个符号就是256个符号从00000000到11111111。 上个世纪60年代美国制定了一套字符编码对英语字符与二进制位之间的关系做了统一规定。这被称为 ASCII 码一直沿用至今。 ASCII码对照 点此进入 二、URL编码 URL
URL - 统一资源定位器Uniform Resource Locator
Web 浏览器使用 URL 从 Web 服务器请求页面。URL 只能使用 ASCII 字符集 通过因特网进行发送。由于 URL 通常包含 ASCII 集之外的字符因此必须将 URL 转换为有效的 ASCII 格式。
URL编码
将字符转换为可通过因特网传输的格式。使用后跟十六进制数字的 % 替代不安全的 ASCII 字符。URL 不能包含空格。URL 编码通常使用加号或 %20 替代空格 URL编码对照表以及编码解码工具 三、Unicode编码 统一码Unicode也叫万国码、单一码由统一码联盟开发是计算机科学领域里的一项业界标准包括字符集、编码方案等。 Unicode 源于一个很简单的想法将全世界所有的字符包含在一个集合里计算机只要支持这一个字符集就能显示所有的字符再也不会有乱码了。 它从 0 开始为每个符号指定一个编号这叫做”码点”code point。比如码点 0 的符号就是 null表示所有二进制位都是 0。 在线 Unicode 编码转换 四、HTML实体编码 为什么有HTML实体编码 在 HTML 中不能使用小于号和大于号这是因为浏览器会误认为它们是标签。如果希望正确地显示预留字符我们必须在 HTML 源代码中使用字符实体character entities。
HTML 实体是一段以连字号 ()开头、以分号 (;)结尾的文本 (字符串)形如 #x6a; 实体常常用于显示保留字符 (这些字符会被解析为 HTML 代码)和不可见的字符 (如“不换行空格”)应用场景在前端一般为了避免 XSS 攻击会将 编码为 与 这些就是 HTML 实体编码使用须知在 HTML 转义时仅仅只需要对六个字符进行编码、、、、 和 。 我们可以使用 he 库进行编码及转义 在线Html实体编码解码 (config.net.cn) 结合编码理解浏览器解析机制 ①a href%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29aaa/a 分析a标签中的href属性放的是url然后现在里面全是url编码URL模块解码出来就是javascript:alert(1),因为是url解码后才能看到javascript所以最后没识别到这个协议即alert没被执行 结果执行失败 ②a href#x6a;#x61;#x76;#x61;#x73;#x63;#x72;#x69;#x70;#x74;:%61%6c%65%72%74%28%32%29 分析先通过HTML解码得到javascript:%61%6c%65%72%74%28%32%29再丢给URL模块URL模块识别到Javascript协议把后边的内容解码后丢给js的模块去处理 结果执行成功 ③a hrefjavascript%3aalert(3)/a 分析和①类似URL识别到完整的javascript:后才能识别出这个协议 结果执行失败 ④div#60;img srcx οnerrοralert(4)#62;/div 分析#60是 #62是 HTML实体编码把这俩转化成尖括号后token就被消耗掉了所以并不会进入到标签开始状态自然img里面的内容也失效了 结果执行失败 ⑤textarea#60;script#62;alert(5)#60;/script#62;/textarea 分析这个看起来和④差不多但其实textarea与title都是RCDATA元素即在这俩标签里面不可能有别的标签存在所以最后也会把变成实体编码 结果执行失败 ⑥textareascriptalert(6)/script/textarea 分析这里与⑤做对照就算不用html实体编码最后也不会识别到script标签 结果:执行失败 ⑦button οnclickconfirm(7#39;);Button/button 分析html实体解码后得到7然后有js的函数confirm就会丢给js模块去处理 结果执行成功 ⑧button οnclickconfirm(8\u0027);Button/button 分析confirm函数里面用了unicode编码没别的编码了所以会解析过后会丢给js模块去处理但是unicode只能用来表示字符串和标识符所以最后右边的没有解析成功 结果执行失败 ⑨script#97;#108;#101;#114;#116#40;#57;#41;#59/script 分析html实体解析完后script中间的内容是alert(1)乍一看应该能执行但是script是原始文本元素只能放文本内容在这里的话里面的东西html不会解析会直接以文本格式丢给js模块去处理js不认识html实体编码 结果执行失败 ⑩script\u0061\u006c\u0065\u0072\u0074(10);/script 分析script原始文本元素丢给js模块去处理解析出来的alert函数是个标识符直接就执行了 结果执行成功 ⑪script\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029/script 分析类似于⑧虽然看起来能解析出个alert(10)但是()不在标识符范围内js解析执行失败 结果执行失败 ⑫script\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)/script 分析与⑪做比较js模块解析出来alert(12)看起来没什么问题但是这里12是两个unicode编码意思就是字符串字符串是必须要才能执行的 结果执行失败 ⑬scriptalert(14\u000a)/script 分析\u000a解码后就是换行解码出来直接执行 结果执行成功 ⑭a href#x6a;#x61;#x76;#x61;#x73;#x63;#x72;#x69;#x70;#x74;#x3a;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x36;#x25;#x33;#x31;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x36;#x25;#x36;#x33;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x36;#x25;#x33;#x35;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x37;#x25;#x33;#x32;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x37;#x25;#x33;#x34;#x28;#x31;#x35;#x29;/a 分析先进行html解码得到 a hrefjavascript:%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(15)/a 再进行URL解码得到 javascript:\u0061\u006c\u0065\u0072\u0074(15) 因为被URL模块识别到js协议了所以丢给js模块解码 javascript:alert(15) 结果执行成功