Я намерен использовать GET для своей формы, но хотел бы зашифровать значения в строке запроса, чтобы пользователи не могли ее изменить. (не для безопасности, а для скрытия данных)
Я столкнулся с несколькими веб-сайтами, которые объяснили шифрование, но мне не ясно, как реализовать его, как только пользователь нажмет кнопку отправки. Пример: http://myscriptlibrary.wordpress.com/2010/04/14/how-to-encrypt-query-string-in-php/
Есть ли пример, который мог бы показать это?
Благодарю.
Из моего понимания ссылки, которую вы предоставили. Вы хотите зашифровать переменные GET или, по крайней мере, запутать их.
Самый лучший и простой способ сделать это – использовать base64_decode/encode
Например, чтобы закодировать строку, вы должны сделать что-то вроде:
$link = "http://www.example.com/?item=".urlencode(base64_encode("user-data"));
$link
будет выглядеть примерно так: http://www.example.com/?item=rklgEwkelnf%3D%3D
, но для перевода кажущегося искаженного (base64ed) текста в нечто полезное, которое вы использовали бы:
foreach($_GET as $loc=>$item) $_GET[$loc] = base64_decode(urldecode($item));
Затем вы можете свободно использовать переменную $_GET
как обычно.
Следующее решение достаточно просто реализовать и достаточно сильное, если вы не имеете дело с очень чувствительными данными, такими как данные кредитных карт или алгоритмы NASA …
Когда вы отправляете параметр через. GET – добавьте вместе с ним значение хэша, например:
$parameter = "abc"; //The parameter which you'll pass as a GET parameter $salt = "cV0puOlx"; $hashed = md5($salt.$parameter);//A hash that you'll pass as well header("Location: http://www.yourdomain.com?param=$parameter&hash=$hash");
Затем, когда вы читаете параметры, убедитесь, что хеш является допустимым:
$parameter = $_GET['param']; $hash = $_GET['hash']; $salt = "cV0puOlx"; $hashed = md5($salt.$parameter); //now you check: if ($hash === $hashed){ //everything's fine - continue processing } else{ // ERROR - the user tried to tamper with your parameter // show error-message and bail-out }
Принятый здесь ответ не дает никакой реальной защиты. Вы можете просто взять закодированные параметры и поместить их в онлайн-base64_decode, и он отображает значения, как будто вы только что передали их напрямую!
Другой ответ использует $ хэш как пропуск через значение, но это значение не было определено только $ hashed.