第三章、Web应用程序技术(编码方案)
不同的编码方案的研发是为了安全处理数据。
但是许多情况下,攻击者可以控制编码方案,造成开发者无法预料的行为。
URL编码
URL中只允许使用US-ASCII码的可打印字符(0x20-0x7e)。
由于在URL或者HTTP协议中,在这个可打印字符范围中,还有一些字符不能用在URL中。所以就用URL编码方案对其编码,使其通过HTTP安全传输。
URL编码一般以 “%” 为前缀,后面跟上这个字符的十六进制ASCAII码。
常见编码字符:
- %3d =
- %25 %
- %20 空格
- %0a 新行
- %00 空字节
当渗透人员提交HTTP请求时,必须对参数中的以上字符进行URL编码。
Unicode编码
是为支持全世界使用的字符编写系统,而设计的字符编码标准。
- UTF-16:以 “%u” 作为前缀,后面跟上这个字符的十六进制Unicode码点
- UTF-8:是一种长度可变的编码标准,它使用一个或者几个字节表示一个字符。以 “%”作为前缀,后面用十六进制表示每个字节。
攻击时利用Unicode编码来破坏确认机制。
HTML编码
HTML编码用于表示问题字符安全并入HTML文档的方案。 许多特殊字符用于定义文档结构而非内容,为了安全使用,所以对其进行HTML编码。
HTML编码定义了大量HTML实体来表示字面量字符,例如:
" "
' '
& &
< <
> >
此外,任何字符都可以用十六进制与十进制的ASCII码进行HTML编码,例如
//十进制
" "
' '
//十六进制
4 "
9 '
HTML编码用于探查跨站点脚本攻击
Base64编码
仅用可打印的ASCII码就可表示任何二进制数据。
用于对邮件的附件编码,还可以用于用户验证机制中用户证书编码。
Base64将输入的数据转换为3个字节块,每个块被划分为4段,每段6个数据位。2^6=64,所以每段有64种排列组合。因此每一段可以用一组64个字符表示。
如果输入数据块最后不能构成3段,就用一个或者两个“=”号补足。
十六进制编码
许多程序传输二进制数据时直接使用十六进制编码。用ASCII字符表示十六进制数据块。
最后想要编码解码的话百度有很多,自行搜索。
下一章
之前的文章对web应用程序基础进行学习,下面开始研究如何渗透攻击
下一章要学习目标应用程序的内容,功能,工作原理,防御机制及其使用的技术。
即==解析应用程序==。