0


在HTTP请求中安全传输base64编码的字符串

前言

base64

是一种常见的的编码格式,它可以把二进制数据编码成一个由大小写英文字母(

a-zA-Z

)、阿拉伯数字(

0-9

),以及三个特殊字符

+

/

=

组成的字符串。

问题

但是在URL传输中,

+

/

=

这三个特殊字符是保留字符(或者叫不安全字符),如果将编码后的base64字符串直接用于URL传输,可能会有意外发生。例如,假设base64编码后的字符串是

x+y

,前端访问

https://www.mysite.com?name=x+y

,后端接收到的

name

参数的值却是

x y

+

号不见了,变成了空格。

解决方案

一、在传递参数前,先对其进行URL编码

只要我们在传递base64字符串之前对其进行URL编码,这些特殊字符就会被转义,这样就不会影响后端接收参数。PHP代码示例:

$encoded=base64_encode('举头望明月');$params=['name'=>$encoded];$url='https://www.mysite.com?'.http_build_query($params);echo$url;

注:只要参数是以query string(参数放在URL后面),或者是以POST(x-www-form-urlencoded)的形式传输的,都应对参数做URL编码处理。

二、使用urlsafe版本的base64编码

urlsafe版本的

base64

编码,其实就是对编码后的字符串做一些字符替换的操作:

  • +字符替换为-
  • /字符替换为_
  • =字符替换为空字符串(即删除=字符)

替换后就可以安全在URL中传输了。

解码则是一个逆向过程,将

-

替换为

+

,将

_

替换为

/

,还有补上

=

号。

urlsafe版本的

base64

编解码示例(PHP):

// 编码functionurlsafeB64Encode($input){returnstr_replace('=','',strtr(base64_encode($input),'+/','-_'));}// 解码functionurlsafeB64Decode($input){$remainder=strlen($input)%4;if($remainder){$padlen=4-$remainder;$input.=str_repeat('=',$padlen);}returnbase64_decode(strtr($input,'-_','+/'));}
标签: 编解码 base64

本文转载自: https://blog.csdn.net/ljfrocky/article/details/133274160
版权归原作者 自由de单车 所有, 如有侵权,请联系我们删除。

“在HTTP请求中安全传输base64编码的字符串”的评论:

还没有评论