Данные GET добавляются к URL в виде строки запроса:
https://example.com/index.html?user=admin&password=whoops
Поскольку данные добавляются к URL-адресу, существует жесткое ограничение на объем данных, которые вы можете передать. У разных браузеров разные ограничения, но у вас начнутся проблемы с отметкой 1–2 КБ.
Данные POST включены в тело HTTP-запроса и не отображаются в URL-адресе. Таким образом, нет ограничений на объем данных, которые вы можете передать через POST.
Если HTTP-соединение использует SSL / TLS, тогда параметры GET также зашифрованы, но могут отображаться в других местах, таких как журналы веб-сервера, и будут доступны для плагинов браузера и, возможно, других приложений. Данные POST зашифрованы и никаким другим образом не утекают.
Из обсуждения Google:
Данные, содержащиеся в URL-запросе по HTTPS-соединению, зашифрованы. Однако включение таких конфиденциальных данных, как пароль, в запрос GET - очень плохая практика. Хотя их нельзя перехватить, данные будут регистрироваться в журналах открытого текста на принимающем HTTPS-сервере и, вполне возможно, также в истории браузера. Вероятно, он также доступен для плагинов браузера и, возможно, даже для других приложений на клиентском компьютере.
Всегда используйте POST через HTTPS, если хотите безопасно передавать информацию.
Если вы используете библиотеку шифрования для шифрования данных, вы можете использовать GET или POST, но это будет дополнительной проблемой, и вы можете неправильно настроить шифрование, поэтому я бы по-прежнему рекомендовал использовать POST через HTTPS, вместо того, чтобы настраивать собственное шифрование. Эта проблема уже решена, не изобретайте велосипед заново.
Другой вариант, который вы можете рассмотреть, - использовать безопасный файл cookie. Файл cookie с установленным флагом безопасности пересылается только по защищенному каналу, например HTTPS, и его нельзя перехватить. Это хороший способ безопасного хранения информации, например идентификатора сеанса.
17.06.2010