当前位置: 首页 > news >正文

在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):

// 编码
function urlsafeB64Encode($input)
{return str_replace('=', '', strtr(base64_encode($input), '+/', '-_'));
}// 解码
function urlsafeB64Decode($input)
{$remainder = strlen($input) % 4;if ($remainder) {$padlen = 4 - $remainder;$input .= str_repeat('=', $padlen);}return base64_decode(strtr($input, '-_', '+/'));
}
http://www.lryc.cn/news/177700.html

相关文章:

  • 05预测识别-依托YOLO V8进行训练模型的识别——对视频中的图片进行识别
  • LeetCode算法题---第3天
  • 欧洲FBA专线海运与陆运的差别
  • UDS诊断
  • 计算材料学学习记录1
  • PHP8中的构造方法和析构方法-PHP8知识详解
  • 【GPU编程】Visual Studio创建基于GPU编程的项目
  • MySQL面试题-索引的基本原理及相关面试题
  • MySQL学习笔记19
  • 为什么u盘在mac上显示不出来
  • 【golang】调度系列之sysmon
  • 货物寄到英国选择什么物流比较划算?
  • vite + react 基本项目搭建
  • 一个方法解决三道区间问题
  • sub0 里斯本精彩回顾:探索波卡区块的创新空间
  • 颜色+情感的英语表达还有这些,零基础学英语口语去哪里,柯桥有推荐的吗?
  • exoplayer的使用-6,播放器的选择
  • Windows上安装 Go 环境
  • 【设计模式】四、工厂模式
  • 十九,镜面IBL--BRDF积分贴图
  • Linux 创建 终止线程(thread)
  • 【IPC 通信】信号处理接口 Signal API(6)
  • ipaguard界面概览
  • 萌新的FPGA学习绪论-1
  • 目标检测算法改进系列之Backbone替换为EMO
  • Laravel一些优雅的写法
  • vue+three.js中使用Ammo.js
  • 【k8s】kubectl命令详解
  • Centos 7 部署SVN服务器
  • SEO方案尝试--Nuxtjs项目基础配置