在url中使用base64编码的字符串和codeigniter

Joh*_*unt 6 php base64 codeigniter

我有一个加密的base64编码数组,我需要将其放入网址并插入到我们发送给客户端的电子邮件中以使它们能够被识别(唯一) - 问题是base64_encode()经常在它之后附加一个=或两个符号字符串,默认情况下CI不允许.

这里有一个例子: http://example.com/cec/pay_invoice/VXpkUmJnMWxYRFZWTEZSd0RXZFRaMVZnQWowR2N3TTdEVzRDZGdCbkQycFFaZ0JpQmd4V09RRmdWbkVMYXdZbUJ6OEdZQVJ1QlNJTU9Bb3RWenNFSmxaaFVXcFZaMXQxQXpWV1BRQThVVEpUT0ZFZ0RRbGNabFV6VkNFTlpsTWxWV29DTmdackEzQU5Nd0lpQURNUGNGQS9BRFlHWTFacUFTWldOZ3M5QmpRSGJBWTlCREVGWkF4V0NtQlhiZ1IzVm1CUk9sVm5XMllEWlZaaEFHeFJZMU51VVdNTmJsdzNWVzlVT0EwZw==

现在我明白我可以在config.php中允许=登录,但是我不完全理解这样做的安全隐患(它必须因某种原因被禁用了吗?)

有谁知道为什么在URL中允许=符号可能是个坏主意?

谢谢!约翰.

Mat*_*ley 17

不确定为什么=不允许,但你也可以省略等号.

$base_64 = base64_encode($data);
$url_param = rtrim($base_64, '=');
// and later:
$base_64 = $url_param . str_repeat('=', strlen($url_param) % 4);
$data = base64_decode($base_64);
Run Code Online (Sandbox Code Playgroud)

base64规范只允许=字符串末尾的符号,它们纯粹用作填充,不存在数据丢失的可能性.

编辑:它可能不允许这作为兼容性选项.从安全角度来看,我没有理由想到它,但是它可能会在工具链的某个地方混淆查询字符串解析.