HTTP传输过程的编码
在HTML中,利用/ ? & 等符号实现针对特定字符的内容定义,如规定访问路径、参数名称及间隔等,传输过程中的编码是为了解决直接出现该特殊字符而定义的;
(1)URL编码
URL只允许包含大小写英文字母、数字、四个特殊字符(- _ . 、)以及所有保留字符;
URL编码主体采用的是ASCII编码表,编码方式是用%加上两位字符代表一个字节,如果当前页面使用UTF-8编码,则会先将中文字符转换成UTF-8编码,然后在每一个字符的每一组编码前添加%,这样就完成了URL编码;
(2)Base64编码
Base64是网络上常见的用于传输8bit字节代码的编码之一,其原理是将3个8bit字节转化为4个6bit的字节,因此Base64编码的特点是编码后的字节数是4的倍数,如果不足使用=进行填充;
Base64编码非常好识别,它含有大小写字母及+、-、=等符号;
Base64编码可用于在HTTP环境下传递较长的标识信息,在HTTP Basic认证中依然利用Base64对用户密码编码后进行传输,在早期的Web木马中,也会利用Base64对木马文件进行重复编码达到源码混淆的效果;
(3)HTML字符实体
HTML字符实体是用来表示HTML中危险字符的方案,也是解决跨站脚本攻击(XSS)的有效手段;
以常见的跨站脚本代码为例:
<script>alert(/xss/)</script>
当这段代码由客户端提交到Web页面后,由于语句中含有<script>
标签,会导致HTML页面将其当做JavaScript代码进行执行,因此在HTML内容中不能使用小于号和大于号,因此浏览器会认为他们是标签;
在日常应用中,如果需要正确地显示危险字符,可以使用HTML字符实体进行实现,HTML字符实体的特点是以&开头,并以分号结尾;
例如,<的编码是<,在实上述语句中,当用户提交的参数为
<script>alert(/xss/)</script>
这样就解决了危险字符的显示问题;
编码的初衷是解决不同类型组件传递信息的一致性;