Как кодировать / шифровать секретные данные для передачи по параметрам URL? - PullRequest
4 голосов
/ 13 августа 2010

Вот история:

Мне нужно передать секретную информацию из одного сценария в другой сценарий. В первом сценарии мне нужно сначала зашифровать данные, а затем я должен прикрепить зашифрованные данные в запрос GET и отправить их в другой сценарий. URL будет выглядеть так:

http://mydomain.com/mysecondscript.php?secret={encrypted stuff}

Мой текущий метод шифрования основан на base64. Проблема этого метода в том, что если у меня есть много вещей для шифрования, зашифрованный результат может быть очень длинным. Если он длиннее 255 символов или около того, второй сценарий не сможет его расшифровать, поскольку строка будет обрезана.

Поэтому я ищу лучший метод шифрования, который может контролировать длину зашифрованного результата.

Ответы [ 5 ]

16 голосов
/ 13 августа 2010

ОПАСНОСТЬ!

Base64 - это НЕ форма шифрования, но кодировка.Строки в кодировке Base64 легко распознать и легко декодировать.Base64 используется для кодирования данных, чтобы их можно было безопасно передавать через небинарный безопасный носитель (например, URL-адреса и электронные письма), но они не скрывают сами данные.

Вам нужно зашифровать строкуиспользуя AES (см. PHP mcrypt ), затем base64 закодируйте его.Это, конечно, не решит проблему длины.Вопрос довольно расплывчатый, но вы можете сделать следующее:

  • Использовать POST вместо GET.
  • Хранить данные в базе данных или файле, к которому могут обращаться оба сценария.Затем просто сгенерируйте вид идентификатора и отправьте его с URL.Получающий скрипт может использовать этот идентификатор для извлечения данных.В качестве дополнительного бонуса вам не нужно отправлять секретные данные с URL.

РЕДАКТИРОВАТЬ: Теперь, когда я прочитал ваш вопрос более внимательно, кажется, что оба сценария сидятна том же сервере.В этом случае нет никакой причины передавать эти данные через HTTP.

2 голосов
/ 13 августа 2010

Независимо от того, насколько безопасна ваша схема шифрования, вам все равно потребуется base64 или URL-кодирование результата, который, как вы обнаружили, может превысить 255 символов. Лучшее, что вы можете сделать, - это сжать данные, затем зашифровать их, затем закодировать. Это все еще вероятно потерпит неудачу. Вам нужно найти альтернативу GET.

0 голосов
/ 08 ноября 2013

Вы можете использовать MD5, чтобы создать хеш идентификатора, чтобы получить что-то вроде:

http://www.demo.com/displaycommittees.php?id=81dc9bdb52d04dc20036dbd8313ed055

В своем запросе БД вы можете сделать выбор для пользователейтаблица, включающая оператор WHERE, который также хэширует столбец идентификатора, например:

WHERE MD5 (id) = $ _GET [id]

Это работает нормально, и я всегда применялэтот алгоритм.например, предполагая фактическое значение зашифрованного идентификатора 23 , если вы попытаетесь поместить 23 вместо зашифрованного (хэш-кода), он не будет работать (результат не будет отображаться),

Примечание: Причины наиболее известны тем, кто нуждается в решении, поэтому вопрос «почему» может не прийти к тем, кто в нем нуждается.они только просят решение, и если оно работает для них хорошо, хорошо.Но для приложения транзакции (например, транзакции наличными или контакты транзакции), пожалуйста, избегайте передачи конфиденциальной информации через URL, потому что она может быть легко взломана.

0 голосов
/ 13 августа 2010

Если это конфиденциальная информация, base64 использовать не следует, так как она может быть легко декодирована.Если вы хотите, чтобы информация была надежно зашифрована, используйте PHP Mcrypt ( ссылка ).Гораздо безопаснее и может поддерживать шифрование гораздо более длинных строк.Лучше всего, вы устанавливаете свой собственный ключ, и он не может быть расшифрован без этого ключа.Это требует чуть больше работы, но это будет безопасно.Кроме того, если вы передаете таким образом несколько переменных, вы можете установить их в массив, сериализовать и зашифровать массив, передать массив с помощью GET, а затем расшифровать / удалить из него.Это так просто.И последнее: есть еще классы, которые сделают Mcrypt намного проще в использовании.Может быть, хотите, чтобы Google, чтобы найти один, это сделает вашу жизнь проще.

0 голосов
/ 13 августа 2010

Почему он вообще должен передаваться в URL? Сохраните его на диск, поместите в базу данных, добавьте в очередь передачи сообщений ...

Вы можете использовать непрозрачный токен в URL, чтобы определить, о чем вы говорите, а затем превратить этот токен в полезную вещь на другом конце, запросив любой механизм хранения, который вы выберете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...