Что-то вроде этого?
SELECT yourtable.id, rev, content
FROM yourtable
INNER JOIN (
SELECT id, max(rev) as maxrev FROM yourtable
WHERE yourtable
GROUP BY id
) AS child ON (yourtable.id = child.id) AND (yourtable.rev = maxrev)
Весь запрос зашифрован, включая URL-адрес и даже команду (GET
). Единственное, что может быть промежуточная сторона, такая как прокси-сервер, - это адрес назначения и порт.
Обратите внимание, однако, что пакет Hello Hello из рукопожатия TLS может рекламировать полное доменное имя в виде открытого текста через расширение SNI (thanks @hafichuk), которое используется всеми современными браузерами, хотя некоторые из них относятся только к более новым операционным системам.
EDIT: (Так как это только что привело меня к «хорошему» Ответ ", я думаю, я должен ответить на весь вопрос ...)
Весь ответ также зашифрован; прокси-серверы не могут перехватывать какую-либо его часть.
Google выполняет поиск и другой контент по https, потому что не все это общедоступно, и вы также можете скрыть часть общедоступного контента из MITM . В любом случае, лучше всего, чтобы Google ответил сам за себя .
Соединение зашифровывается перед передачей запроса. Так что да, запрос также зашифрован, включая строку запроса.
Да, это безопасно. SSL шифрует все.
Выдержка из запроса POST:
POST /foo HTTP/1.1
... some other headers
Выдержка из запроса GET:
GET /foo?a=b HTTP/1.1
... some other headers
В обоих случаях все, что отправлено на сокет зашифрован. Тот факт, что клиент видит параметры в своем браузере во время запроса GET, не означает, что человек в середине будет видеть то же самое.
SSL выполняется перед анализом заголовка, это означает:
Client creates Request
Request gets encrypted
Encrypted request gets transmitted to the Server
Server decrypts the Request
Request gets parsed
Запрос выглядит примерно так (не помню точный синтаксис, но это должно быть достаточно близко):
GET /search?q=qwerty HTTP/1.1
Host: www.google.de
Именно поэтому наличие разных SSL-сертификатов для нескольких хостов на одном и том же IP-адресе является проблематичным, запрошенное имя хоста неизвестно до дешифрования.
HTTPS Устанавливает базовую SSL-связь до передачи любых HTTP-данных. Это гарантирует, что все данные URL (за исключением имени хоста, который используется для установления соединения) переносятся исключительно внутри этого зашифрованного соединения и защищены от атак типа «человек в середине» таким же образом, как и любые HTTPS-данные.
Вышеприведенное является частью ОЧЕНЬ всестороннего ответа от Google Answers, расположенного здесь:
http://answers.google.com/answers/threadview /id/758002.html#answer
Все зашифровано, но вам нужно помнить, что ваш запрос останется в журналах сервера и будет доступен для различных анализаторов журналов и т. д. (что обычно не относится к запросу POST).
Я просто подключился через HTTPS к веб-сайту и передал кучу параметров GET. Затем я использовал wirehark, чтобы обнюхать сеть. Используя HTTP, URL-адрес отправляется незашифрованным, что означает, что я могу легко увидеть все параметры GET в URL-адресе. Используя HTTPS, все зашифровано, и я даже не вижу, какой пакет является командой GET, не говоря уже о ее содержимом!
Запрос GET зашифрован при использовании HTTPS - на самом деле именно поэтому защищенные веб-сайты должны иметь уникальный IP-адрес - нет способа получить требуемое имя хоста (или виртуальный каталог) из запроса до тех пор, пока оно не будет расшифровано.
Часть URL-адреса после имени хоста отправляется надежно.
Например, https://somewhere.com/index.php?NAME=FIELD
Часть /index.php?NAME=FIELD
зашифрована. somewhere.com
нет.
Сам URL-адрес зашифрован, поэтому параметры строки запроса не перемещаются в обычном режиме.
Однако имейте в виду, что URL-адреса, включая данные GET, часто регистрируются веб-сервером, тогда как данные POST редко бывают. Поэтому, если вы планируете делать что-то вроде /login/?username=john&password=doe
, тогда не делайте этого; вместо этого используйте POST.