【发布时间】:2018-04-21 15:00:15
【问题描述】:
我正在尝试在 GET 请求中将下载 URL 从第 1 页传递到第 2 页。
第 1 页通过数据库获取原始 URL,然后加密 URL 并使其在站点上可用。当它通过 URL 时,第 2 页会解密 URL 并下载文件。
当前网址如下所示:
它包含很多 %%%,因为它是 urlencoded,有没有办法改变它以减少 URL 的长度并使它看起来不那么混乱,但保持它现在的安全?
希望有人能帮帮我。
这是加解密脚本:
define("ENCRYPTION_KEY", "ducksandpizza");
function encrypt($pure_string, $encryption_key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);
return urlencode($encrypted_string);
}
function decrypt($encrypted_string, $encryption_key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypted_string = urldecode($encrypted_string);
$decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);
return $decrypted_string;
}
//$encrypted = encrypt($_GET['dl'], ENCRYPTION_KEY);
$decrypted = decrypt($_GET['dl'], ENCRYPTION_KEY);
//echo 'encrypted: ' . $encrypted . '<br>';
echo 'decrypted: ' . $decrypted . '<br>';
【问题讨论】:
-
使用
base64_encode()而不是urlencode() -
保护数据的概念多么可怕!
-
这段代码有很多问题。
mcrypt已弃用。此外,ECB 模式不保证消息的完整性。攻击者可以更改加密数据,而您需要相同的 IV 才能解密。最后,您使用的是 ECB.... -
“我正在尝试在 GET 请求中将下载 URL 从第 1 页传递到第 2 页” - 将“GET 请求”替换为“会话”,并且做得好!也使加密解密的废话变得多余。
-
你必须使用GET吗? Cookie、会话或 POST 请求有效,不会弄乱 URL。
标签: php url encryption encryption-symmetric