it-swarm-id.com

SSL dengan GET dan POST

Saya cukup baru untuk keamanan, jadi maafkan pertanyaan dasar saya, tetapi apakah SSL mengenkripsi POST permintaan tetapi tidak MENDAPATKAN permintaan?

Misalnya, jika saya memiliki dua permintaan

DAPATKAN: www.mycoolsite.com/index?id=1&type=xyz

POST

situs: www.mycoolsite.com/index {Params: id = 1 & type = xyz}

Apakah aman untuk berasumsi bahwa seseorang dapat mencegat seluruh permintaan GET (membaca id dan jenis), tetapi jika mereka mencegat POST mereka akan dapat melihat jalur situs, tetapi karena itu akan melewati SSL, mereka tidak dapat melihat parameter id dan tipe?

58
TomJ

Sekarang, pertanyaannya adalah, apakah Anda tahu seperti apa permintaan HTTP ?

Nah, anggap tidak, inilah contohnya:

GET /test?param1=hello&param2=world HTTP/1.1
Host: subdomain.test.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive

Semua dari informasi ini di-enkapsulasi dalam transport SSL - seperti yang dikatakan komentar Anda. Ini berarti:

  • Dapatkan parameter terenkripsi.
  • Badan HTTP (parameter pos) dienkripsi.

Apa yang belum tentu aman:

  • Tuan rumah yang Anda minta. Sebagian besar server web hari ini mendukung Host: something parameter sehingga banyak domain dapat ditangani oleh satu server web pada satu antarmuka dan alamat IP. Jelas, tajuk ini is terenkripsi, namun, jika Anda menjalankan lalu lintas non-https ke situs, harus jelas host mana yang mungkin Anda sambungkan. Bahkan jika itu tidak terjadi, reverse DNS pasti akan memberi tahu Anda apa yang di-host pada IP itu dan Anda mungkin dapat membuat perkiraan yang masuk akal dari sana.
  • Informasi klien/browser Anda. Sayangnya setiap klien https berbeda dan proses negosiasinya berpotensi memberikan platform apa yang dijalankannya, atau apa browser itu. Ini bukan akhir dunia dengan cara apa pun, itu hanya fakta untuk dipahami.

Permintaan POST terlihat mirip untuk mendapatkan permintaan, kecuali permintaan itu berisi sebuah badan. Ini mungkin terlihat seperti ini:

POST /testpost HTTP/1.1
Host: subdomain.test.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive

param1=hello&param2=hello

Ada beberapa varian yang lebih rumit, tentu saja, tetapi pada dasarnya semuanya terenkripsi.

59
user2213

Saya tidak melihat ini disebutkan dalam respons lain, tetapi Anda biasanya tidak boleh memasukkan informasi rahasia (kata sandi) dalam MENDAPATKAN permintaan bahkan dengan SSL, tetapi gunakan POST sebagai gantinya. Mengapa? URL dengan informasi sensitif umumnya akan dicatat di kedua ujungnya; misalnya, dalam daftar riwayat peramban Anda (https://www.example.com?user=me&password=MyPassword) serta log di server. POST Informasi (terutama dengan kata sandi) umumnya tidak ditulis ke log server web, meskipun jelas dapat dikonfigurasi untuk dicatat - jadi sebaiknya tidak menggunakan kembali (atau menggunakan kata sandi yang serupa) di situs yang berbeda.

36
dr jimbob

SSL mengenkripsi dan memastikan keaslian seluruh koneksi, termasuk metode dan URL yang diminta. GET juga dilindungi sebagai POST.

Ketika SSL berfungsi sebagaimana dimaksud, seorang penyadap hanya dapat melihat alamat IP apa yang terhubung ke alamat IP apa (dan pada port apa, tetapi biasanya 443), pada jam berapa, dan berapa. Jika ada beberapa host virtual di mesin yang sama, penyerang tidak dapat mengetahui yang mana yang Anda hubungi (namun, penyadap dapat melihat permintaan DNS Anda tepat sebelum permintaan HTTPS dan mengambil tebakan yang masuk akal). Semua informasi ini juga diautentikasi: penyerang aktif tidak dapat bermain man-in-the-middle dan memodifikasi data dalam perjalanan.

Hal-hal yang dapat membuat SSL tidak berfungsi sebagaimana dimaksud:

  • Penyalahgunaan aplikasi, di mana beberapa data tidak sengaja dikirim melalui HTTP biasa.
  • Salah satu kerentanan langka dalam protokol SSL, seperti yang terbaru kerentanan BEAST .
  • Manipulasi sertifikat yang buruk, yang memungkinkan penyerang untuk lulus sebagai server, baik karena sertifikat server telah bocor, otoritas sertifikasi telah mengirimkan sertifikat kepada penyerang secara tidak patut, atau karena klien tidak memeriksa sertifikat server dengan benar.
    • Pada catatan ini, ingatlah bahwa SSL, seperti yang digunakan sebagian besar waktu, mengotentikasi server tetapi bukan klien. Server tidak dapat menganggap apa pun tentang klien.
  • A serangan saluran samping dapat mengungkapkan beberapa informasi kepada eavesdropper. Misalnya, waktu yang tepat di mana peserta mengirim data dapat mengungkapkan sesuatu tentang bagaimana data dihitung dan dengan demikian tentang sifat data. Ukuran setiap paket juga diketahui penyerang. Bagaimana mengungkapkan hal ini dapat tergantung pada apakah para peserta mengambil tindakan pencegahan dan pada sifat informasi. Percakapan real-time jauh lebih rentan terhadap analisis lalu lintas seperti itu daripada mengunduh file.

Lihat juga Bagaimana mungkin orang yang mengamati koneksi HTTPS yang dibuat tidak tahu cara mendekripsi? untuk latar belakang tertentu.

Hanya untuk menambahkan satu detail kecil lagi, seperti bagaimana ini dicapai melalui HTTP.
Anda mungkin bertanya-tanya (atau seharusnya, jika Anda tahu terbiasa dengan handshake SSL ), bagaimana saluran SSL dibuat, tanpa permintaan GET yang dikirim tidak terenkripsi? Bagaimana jika permintaan saya harus melalui proxy - bagaimana mungkin?

HTTP v1.1 memperkenalkan CONNECT Metode HTTP, yang pada dasarnya mengirimkan permintaan yang disederhanakan ke server melalui proxy, yang hanya berisi URL Host yang paling sederhana (tanpa tambahan apa pun parameter, header, atau badan). Berdasarkan permintaan ini, sebuah terowongan SSL dibangun, dan kemudian permintaan GET (atau POST) asli dikirim atasnya.

6
AviD

Poin lain yang tidak disebutkan adalah bahwa jika Anda menggunakan GET dan memiliki konten pihak ketiga yang disematkan atau ditautkan (misalnya iklan situs), maka situs pihak ketiga tersebut akan mendapatkan URL lengkap (dengan data parameter sensitif) di header Referer.

Itu memaparkan data kepada pihak ketiga yang seharusnya tidak memilikinya.

4
Rodney

Sumber: Jawaban tentang Stack Overflow

The metode GET dimaksudkan hanya untuk pengambilan data dan seharusnya tidak memiliki efek samping . Tapi POST dimaksudkan untuk tujuan tertentu: mengubah data di sisi server.

MENDAPATKAN permintaan dapat dengan mudah dilakukan sebelumnya (lihat Pemalsuan Permintaan Lintas Situs ) dengan hanya menempatkan gambar pada halaman sambil memalsukan POST permintaan tidak semudah itu (ini juga alasan mengapa Anda hanya boleh mengizinkan permintaan POST) yang diotorisasi.

4