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

时间:2011-07-01 03:47:02

标签: php codeigniter base64

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

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

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

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

谢谢! 约翰。

4 个答案:

答案 0 :(得分: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);

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

编辑:它可能不允许将其作为兼容性选项。从安全角度来看,我没有理由想到它,但是它可能会在工具链的某处解决查询字符串解析。

答案 1 :(得分:2)

最初网址中根本没有任何有害字符。但是,没有经验丰富的开发人员或写得不好的软件可以帮助某些角色变得邪恶。

截至= - 我认为在网址中使用它没有任何问题

答案 2 :(得分:2)

请在config.php文件中添加字符“=”到$ config ['allowed_uri_chars'],你可以在application / config文件夹中找到该文件

答案 3 :(得分:1)

您可以使用本机php的urlencode和urldecode函数来代替更新配置文件。

$str=base64_encode('test');
$url_to_be_send=urlencode($str);
//send it via url

//now on reciveing side

//assuming value passed via get is stored in $encoded_str

$decoded_str=base64_decode(urldecode($encoded_str));