Security ❀ HTTP传输过程的编码

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字符实体的特点是以&开头,并以分号结尾;
例如,<的编码是&lt,在实上述语句中,当用户提交的参数为

&lt;script&gt;alert(/xss/)&lt;/script&gt; 

这样就解决了危险字符的显示问题;
编码的初衷是解决不同类型组件传递信息的一致性;

猜你喜欢

转载自blog.csdn.net/qq_42197548/article/details/106108968