2011-07-01 46 views
4

我有一個加密的base64編碼數組,我需要將它放入一個url並插入到我們發送給客戶端的電子郵件中,以使它們能夠被識別(唯一) - 問題是base64_encode()通常會在字符串之後附加一個=符號或兩個字符,缺省情況下,該字符不被CI使用。在url中使用base64編碼的字符串與codeigniter

下面是一個例子: http://example.com/cec/pay_invoice/VXpkUmJnMWxYRFZWTEZSd0RXZFRaMVZnQWowR2N3TTdEVzRDZGdCbkQycFFaZ0JpQmd4V09RRmdWbkVMYXdZbUJ6OEdZQVJ1QlNJTU9Bb3RWenNFSmxaaFVXcFZaMXQxQXpWV1BRQThVVEpUT0ZFZ0RRbGNabFV6VkNFTlpsTWxWV29DTmdackEzQU5Nd0lpQURNUGNGQS9BRFlHWTFacUFTWldOZ3M5QmpRSGJBWTlCREVGWkF4V0NtQlhiZ1IzVm1CUk9sVm5XMllEWlZaaEFHeFJZMU51VVdNTmJsdzNWVzlVT0EwZw==

現在我明白了,我可以允許在config.php等號(=),但我不完全瞭解安全含義這樣做(這一定是有原因的殘疾對嗎?)

有誰知道爲什麼在URL中允許=符號可能是個壞主意?

謝謝! 約翰。

+0

*是的,真的是加密的,以及編碼。 –

+0

如果您使用細分受衆羣,CI doensn't不允許使用'='。如果你啓用查詢字符串,'='將是完全合法的(當然) –

回答

16

不知道爲什麼=不允許使用它,但你也可以離開過等號。

$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); 

的基於64規範只允許在字符串的結尾=跡象,它們被用來純粹作爲填充,不存在數據丟失的機率。

編輯:它可能不允許它作爲兼容性選項。從安全的角度來看,沒有理由可以考慮,但是有可能它會在工具鏈中的查詢字符串解析中混亂。

2

最初在url中根本沒有任何有害字符。但是沒有經驗豐富的開發人員或者不好寫的軟件來幫助一些角色變得邪惡。

由於= - 我看不出有任何問題與網址

0

請添加/字符「=」把$ config [「permitted_uri_chars」]在你的config.php文件,你可以找到在應用程序文件config文件夾

1

而不是更新配置文件,您可以使用進行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));