использование строки в кодировке base64 в URL с codeigniter - PullRequest
5 голосов
/ 01 июля 2011

У меня есть зашифрованный массив в кодировке base64, который мне нужно поместить в URL и вставить в электронные письма, которые мы отправляем клиентам, чтобы их можно было идентифицировать (уникально) - проблема в том, что base64_encode () часто добавляет символ = или два после строки символов, которые по умолчанию запрещены CI.

Вот пример: http://example.com/cec/pay_invoice/VXpkUmJnMWxYRFZWTEZSd0RXZFRaMVZnQWowR2N3TTdEVzRDZGdCbkQycFFaZ0JpQmd4V09RRmdWbkVMYXdZbUJ6OEdZQVJ1QlNJTU9Bb3RWenNFSmxaaFVXcFZaMXQxQXpWV1BRQThVVEpUT0ZFZ0RRbGNabFV6VkNFTlpsTWxWV29DTmdackEzQU5Nd0lpQURNUGNGQS9BRFlHWTFacUFTWldOZ3M5QmpRSGJBWTlCREVGWkF4V0NtQlhiZ1IzVm1CUk9sVm5XMllEWlZaaEFHeFJZMU51VVdNTmJsdzNWVzlVT0EwZw==

Теперь я понимаю, что могу разрешить знак = в config.php, но не до конца понимаю последствия для безопасности (это должно быть отключено по какой-то причине, верно?)

Кто-нибудь знает, почему может быть плохой идеей разрешать символ = в URL?

Спасибо! Джон.

Ответы [ 4 ]

17 голосов
/ 01 июля 2011

Не знаю, почему = запрещено, но вы также можете не указывать знаки равенства.

$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 допускает только знаки = в конце строки, и ониПри использовании исключительно в качестве отступов вероятность потери данных отсутствует.

Редактировать: Возможно, это не допустимо в качестве параметра совместимости.Нет причин, по которым я могу думать с точки зрения безопасности, но есть вероятность, что это может привести к путанице при разборе строки запроса где-нибудь в цепочке инструментов.

2 голосов
/ 09 декабря 2014

Пожалуйста, добавьте символ "=" в $ config ['allow_uri_chars'] в вашем файле config.php, этот файл можно найти в папке application / config

2 голосов
/ 01 июля 2011

Изначально в URL нет никаких вредных символов. Но нет опытных разработчиков или плохо написанного программного обеспечения, которое помогает некоторым персонажам становиться злыми.

По состоянию на = - я не вижу проблем с его использованием в URL

1 голос
/ 26 декабря 2014

Вместо обновления конфигурационного файла вы можете использовать функцию urlencode и urldecode собственного php.

$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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...