Я пытаюсь передать URL загрузки со страницы 1 на страницу 2 в запросе GET.
Страница 1 получает необработанный URL через базу данных, затем шифрует URL и делает его доступным на сайте. Когда он передается через URL, страница 2 расшифровывает URL и загружает файл.
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>';
Используйте какой-либо тип сжатия незашифрованных данных, например gzcompress()
а затем передать это в ваш метод шифрования, и вывод этого в base64_encode
, Кодировка Base64 по-прежнему увеличивает общий размер, но не так сильно, как кодировка url.
При использовании base64_encode()
не обязательно плохой Идея, никто не упомянул, что стандартная кодировка base64 не URL-безопасный поскольку он использует символы, значимые в синтаксисе URL.
Тем не менее, есть вариант, который безопасно это используется для кодирования токенов JWT:
function base64url_encode($bin) {
return str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($bin));
}
function base64url_decode($str) {
return base64_decode(str_replace(['-', '_'], ['+', '/'], $str));
}
Вы должны также иметь в виду GET
На запросы распространяются ограничения по длине, которые различаются в зависимости от реализации HTTP-сервера и языков. Вы, вероятно, захотите использовать что-то вроде gzcompress()
как предлагается в комментариях, но более вероятно, что вы должны передавать эти данные в POST
вместо.