【安全】web中的常见编码&浅析浏览器解析机制

这篇具有很好参考价值的文章主要介绍了【安全】web中的常见编码&浅析浏览器解析机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

常见编码

一、ASCII码

二、URL编码 

三、Unicode编码

四、HTML实体编码

结合编码理解浏览器解析机制


常见编码

一、ASCII码

        ASCII (American Standard Code for Information Interchange,美国信息交换标准代码)        

      计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有01两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000011111111

        上个世纪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%29">aaa</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 href="javascript%3aalert(3)"></a>

分析:和①类似,URL识别到完整的javascript:后才能识别出这个协议
结果:执行失败


 ④

<div>&#60;img src=x onerror=alert(4)&#62;</div>

分析:&.#60(打了个.防止csdn给我解码了)是< ,&.#62是> HTML实体编码把这俩转化成尖括号后token就被消耗掉了所以并不会进入到标签开始状态,自然<img>里面的内容也失效了
结果:执行失败


 ⑤

<textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>

分析:这个看起来和④差不多,但其实<textarea>与<title>都是RCDATA元素,即在这俩标签里面,不可能有别的标签存在,所以最后也会把<>变成实体编码
结果:执行失败


 ⑥

<textarea><script>alert(6)</script></textarea>

分析:这里与⑤做对照,就算<>不用html实体编码,最后也不会识别到<script>标签
结果:执行失败


 ⑦

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

分析:html实体解码后得到'7'然后有js的函数confirm就会丢给js模块去处理
结果:执行成功


 ⑧

<button onclick="confirm('8\u0027);">Button</button>

分析:confirm函数里面用了unicode编码,没别的编码了,所以会解析过后会丢给js模块去处理,但是unicode只能用来表示字符串和标识符,所以最后右边的'没有解析成功
结果:执行失败

【安全】web中的常见编码&浅析浏览器解析机制,网安,前端,安全,编码


  ⑨

<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编码,意思就是字符串,字符串是必须要''才能执行的
结果:执行失败


 ⑬

<script>alert('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 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(15)"></a>
再进行URL解码得到👇
javascript:\u0061\u006c\u0065\u0072\u0074(15)
因为被URL模块识别到js协议了,所以丢给js模块解码
javascript:alert(15)
结果:执行成功文章来源地址https://www.toymoban.com/news/detail-609255.html

到了这里,关于【安全】web中的常见编码&浅析浏览器解析机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 各大浏览器对H264、H265编码格式视频的支持情况

    web项目开发时,经常会遇到播放视频的情况,目前主流的视频编码格式有:H264、H265、VP8、VP9、DIVX等,主流的浏览器有:谷歌、火狐、Edge、Safari等,但由于浏览器对各编码的支持程度不一,导致部分视频无法播放,具体支持情况如下图(仅供参考): AVC(h264) HEVC(H265) MPEGS(D

    2024年02月14日
    浏览(44)
  • 面试:浏览器常见问题-优化与兼容

    前端开发浏览器优化方案有哪些? 以下是一些前端开发中常用的浏览器优化方案: 减少HTTP请求数量:将多个CSS和JavaScript文件合并为一个文件,使用CSS sprites来减少图片请求数量,使用字体图标替代小图标等,可以减少HTTP请求,加快页面加载速度。 压缩和合并文件:使用压

    2024年02月15日
    浏览(41)
  • 浏览器原理 之 浏览器安全

    XSS 攻击,即跨站脚本攻击(Cross-Site Scripting),是一种常见的网络安全漏洞,它允许攻击者将恶意脚本注入到其他用户浏览的正常网页中。这些恶意脚本通常以 JavaScript 形式出现,并在用户的浏览器中执行。执行的结果可以是窃取用户的cookies、会话令牌,或者对用户的账户进

    2024年04月25日
    浏览(45)
  • 浏览器安全级别怎么设置,设置浏览器安全级别的方法

    浏览器作为重要的上网入口,发挥着重要作用。浏览器的功能不只是用看网页看视频,现在已经发展成为提供全方位服务的综合工具。正是这个原因,浏览器的安全性受到了挑战,要想浏览器安全浏览得到保障,就要设置浏览器的安全级别,那么怎么设置呢?本文将分享浏览

    2024年02月07日
    浏览(67)
  • web浏览器脚本的调试

    水一贴。 在浏览器中按F12 点击\\\"source\\\"或者\\\"源程序\\\" 点击html、js、css等源码文件所在的窗口的左边,此时点击处显示为蓝色光标,表示断点中断已经设置完毕。 配合窗口右上角的\\\"继续\\\" “下一步” \\\"跳过\\\"等控制按钮,即可完成对网页源码的调试。

    2024年02月14日
    浏览(52)
  • web浏览器打开本地exe应用

    浏览器打开本地exe程序我们可以使用ActiveXObject方法,但是只支持IE,谷歌、火狐等浏览器并不支持此操作。 那问题来了,我们又该如何操作? 经过本博主的不断学习探索终于找到了一条,像百度网盘那样打本地exe应用的办法。我们可以通过添加注册表. 向系统添加一个类似于

    2024年02月13日
    浏览(45)
  • 防关联浏览器推荐:MuLogin指纹浏览器安全登录多平台账号

    在现今的数字时代,我们的生活离不开互联网。我们使用在线平台进行银行交易、购物、社交媒体互动和其他各种活动。为了保护个人隐私和账号安全,我们需要寻找一种安全且方便的方式来管理我们的在线账号。 MuLogin 指纹浏览器正是为了满足这些需求而设计的一款工具。

    2024年02月08日
    浏览(53)
  • 前端开发中常见的浏览器兼容性问题及解决方案

    提示:这里主要阐述浏览器兼容性产生的环境: 所谓的浏览器兼容性问题,是指 因为不同浏览器对同一段代码有着不同的解析,所造成页面显示效果不统一的情况。 为此,解决浏览器兼容,也成为了跨浏览器开发的一个核心问题。 当初微软不加入W3C,使得后者不采用IE的方

    2023年04月18日
    浏览(51)
  • web3 :开源区块链浏览器调研

    2024年01月25日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包