常见的安全漏洞原理以及防御知识——第一章:基础篇---编码方案详解(4)

回顾上一篇文章:第一章:基础篇----Cookie、状态码、HTTPS、HTTP身份验证(3)

编码方案

Web应用程序对其数据采用几种不同的编码方案,以便能够处理不常见的字符和二进制数据。攻击Web应用程序通常需要使用相关方案对其数据进行编码,确保应用程序按照想要的方式进行处理。

1.URL编码

在这里插入图片描述
控制字符就是所说的不可打印字符。
在这里插入图片描述(图片来源于https://blog.csdn.net/qq_38769551/article/details/101459811)

URL只允许使用US-AscII码字符集中的可打印字符(0x20 — 0x7e),而且由于一些特殊含义,在可打印字符范围内的一些字符不能用在URL中,所以用URL编码方案对进行编码,使其通过HTTP安全运输。

(1)URL编码格式:都以%为前缀,其后是这个字符的两位十六进制ASCII码。

(2)常见的URL编码字符:

  • %3d 代表 =
  • %25 代表 %
  • %20 代表 空格
  • %0a 代表 新行
  • %00 代表 空字节

当渗透人员提交HTTP请求时,必须对参数中的以上字符进行URL编码。

另一个值得注意的编码字符是 :加号(+):其代表空格(除%20 代表空格外)
(URL中的+号,通过 GET方式传值的时候,+号会被浏览器处理为空,需要转换为%2B)

渗透测试中要熟练知道这些常用url编码字符的含义,有些通过特殊编码后,含义相同,但可以绕过waf。

2.Unicode编码

为了支持全世界使用的字符编写系统,而设计的字符编码标准

  • UTF-16 :以“ %u ”作为前缀,后面加上 这个字符的 十六进制Unicode码点
  • UTF-8 :是一种长度可变的编码标准,它使用一个或者几个字节表示一个字符。以“ % ”作为前缀,后面用 十六进制表示每个字节

攻击时利用Unicode编码来破坏确认机制

扩展:burp中Decoder解码工具
—————— Burp Decoder的功能比较简单,作为Burp Suite中一款编码解码工具,它能对原始数据进行各种编码格式和散列的转换。

3.HTML编码

HTML编码用于表示 问题字符 安全并入 HTML文档的方案。
许多特殊字符用于定义 文档结构 而非 内容,为了安全使用,所以对进行HTML编码。

HTML编码用于探查跨站点脚本攻击

HTML 中的预留字符必须被替换为字符实体
————————————————————
例如在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。如需显示小于号,我们必须这样写:&lt;&#60;

(1)HTML编码定义了大量HTML实体来表示字面量字符,例如:

  • HTML的&quot;"的转义字符 (也就是说在HTML中双引号是可用&quot;表示的)
  • &apos;->'
  • &amp;->&
  • &lt;-> <
  • &gt;-> >

(2)此外,任何字符都可以用它的十六进制十进制的ASCII码进行HTML编码,例如:

十进制:

  • &#34; -> "
  • &#39; -> ’

十六进制:(以x为前缀)

  • &#x22; -> "
  • &#x27; -> ’

(3)HTML 中有用的字符实体

注释:实体名称对大小写敏感!
在这里插入图片描述

4.Base64编码

Base64编码仅用一个可打印的ASCII字符就可安全转换任何二进制数据。
它常用于对电子邮件附件进行编码,还可用于用户验证机制中用户证书编码。

Base64将输入的数据转换为 3个字节块 ,每个块 被划分为 4段,每段6个数据位。2^6=64,,故每段有64种排列组合。因此每一段可以用一组64个字符表示。

如果输入数据块最后不能构成3段,就用一个或者两个“=” 号补足。

5.十六进制编码

许多程序传输二进制数据时直接使用十六进制编码。用ASCII字符表示十六进制数据块。

附:常用到的在线编码解码工具

Base64 在线编码解码

Emoji表情符号编码/解码


参考文章:https://blog.csdn.net/wwwmeymar/article/details/104117023


下一篇:HTTP方法漏洞利用

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
函数是一段封装了特定功能的代码块,可以重复调用。无论是编写程序还是解决问题,函数都是非常重要的工具。了解并熟练使用函数对于精通Python的基础来说十分重要。 在Python中,函数的定义以关键字"def"开头,后面是函数的名称和参数列表。参数列表用于接收调用函数时传递的参数。在函数体内部,通过缩进来组织函数代码,并使用return语句返回函数的结果。 函数的优势体现在以下几个方面: 1. 代码的重用性:可以将一段常用的代码封装成函数,以便在其他地方重复使用,提高了代码的可读性和可维护性。 2. 简化程序结构:函数可以将复杂的问题分解为多个简单的小问题,使程序结构更加清晰,易于理解和修改。 3. 提高代码的可测试性:函数是模块化的单元,可以独立测试和验证,减少了程序出错的可能性。 在编写函数时,要注意以下几点: 1. 函数名称要有意义,能够表达函数的功能。 2. 参数列表可以根据需要进行定义,可以有多个参数,也可以没有参数。 3. 函数的代码要尽量简洁、清晰,避免冗余和重复的部分。 4. 在函数内部,可以使用局部变量来保存中间结果,避免对全局变量的过多依赖。 总之,函数是编程中不可或缺的组成部分,掌握了函数的使用,就掌握了解决问题的利器。在后续的学习中,我们将进一步学习函数的高级应用,如函数的递归调用、函数的参数传递等。通过不断的实践和练习,相信不久的将来,我们就能够精通Python的基础

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值