Sayangnya, satu-satunya solusi umum untuk masalah ini adalah memberi pengguna Anda https://
satu - satunya dan memastikan bahwa mereka berharap untuk menggunakannya saja. Pada akhirnya adalah tanggung jawab pengguna untuk memeriksa apakah mereka menggunakan SSL / TLS, seperti yang mereka harapkan.
Solusi lain rentan terhadap serangan man-in-the-middle, bahkan jika situs web hanya menerima koneksi SSL / TLS. Penyerang dapat mencegat lalu lintas ke http://example.com
(seperti yang diminta oleh pengguna, bahkan jika example.com
tidak mendengarkan pada port itu) dan menggantinya dengan membuat koneksi mereka sendiri https://example.com
, proksi itu kembali ke pengguna.
Ada aturan OWASP terhadap pengalihan otomatis karena ini. Itu dihapus, mungkin karena pengalihan bukan cara yang buruk untuk mengurangi risiko (terutama terhadap penguping pasif), tetapi tidak menyelesaikan masalah mendasar.
Ada berbagai teknik yang dapat Anda gunakan untuk memandu pengguna ke situs HTTPS, dan itu bukan ide yang buruk untuk menggunakannya (meskipun itu tidak akan melindungi mereka terhadap penyerang MITM aktif).
Pertama, jika Anda tidak memiliki apa pun yang harus disajikan dalam HTTP biasa di server web, matikan port 80 (mis. Hapus Listen 80
dalam konfigurasi Apache Httpd). Para pengguna harus menggunakan https://
setiap saat, yang mungkin tidak nyaman.
Kedua, di bagian konfigurasi Apache Httpd Anda untuk jalur tertentu (baik Location
atau Directory
), gunakan SSLRequireSSL
direktif : itu akan memerlukan penggunaan SSL / TLS (bahkan jika Anda sudah mengonfigurasinya pada port alternatif sebenarnya). Server web lain mungkin memiliki arahan yang serupa.
Ketiga, Anda dapat menggunakan pengalihan, baik menggunakan mod_rewrite
atau dalam kode Anda (jika itu aplikasi). Sesuatu seperti ini harus dilakukan, untuk lokasi tertentu ( lihat HTTPS
variabel khusus ; Anda dapat menggunakan 302 juga, tetapi 301 lebih baik jika ini menjadi lebih permanen):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
Lebih penting lagi, pastikan bahwa semua tautan ke bagian aman itu digunakan https://
. Jangan pernah mengandalkan pengalihan otomatis untuk melakukan pekerjaan untuk Anda. Untuk alasan ini, saya sarankan untuk tidak menggunakannya sama sekali selama fase pengembangan .
Namun, saya perhatikan bahwa saya masih dapat mengakses situs web secara tidak aman, yaitu. dengan menggunakan http
bukan https
.
Ini juga terdengar seperti Anda menggunakan konfigurasi yang sama untuk keduanya http
dan https
. Jika Anda menggunakan Apache Httpd, saya akan menyarankan memecah konfigurasi menjadi dua VirtualHost
s berbeda : satu untuk port 80 dan satu untuk port 443. Mereka tidak harus memiliki konfigurasi yang persis sama: hanya saja jangan meletakkan apa yang hanya untuk HTTPS di virtual host HTTP sama sekali.
Cara untuk mengurangi masalah yang disebutkan di atas adalah dengan menggunakan HTTP Strict Transport Security , untuk browser yang mendukungnya (ini berlaku untuk seluruh host sejauh yang saya tahu). Koneksi pertama mungkin masih terpapar jika https://
tidak digunakan tanpa pengalihan, tetapi mungkin saja ada daftar situs yang dimuat sebelumnya yang mengharapkan https://
(dan diaktifkan untuk HSTS).
https://mail.google.com
. Jika, sebagai pengguna, Anda melihatnya berfungsi dengan baikhttp://mail.google.com
, mungkin ada MITM yang mengesahkan permintaan ke yang aslihttps://mail.google.com
. Sayangnya, Gmail tidak bisa berbuat banyak tentang hal itu jika pengguna sendiri tidak memeriksanya. Prinsip yang sama seperti dalam kehidupan nyata: jika Alice ingin berbicara dengan Bob, tetapi berbicara dengan Chuck (yang mengaku sebagai Bob) alih-alih tanpa memverifikasi ID, Bob tidak akan tahu tentang percakapan ini dan tidak akan dapat melakukan apapun tentang itu. Ini tanggung jawab Alice.Yang Anda perlukan hanyalah mengarahkan lalu lintas http ke https - lihat artikel ini 'Mengarahkan http ke https koneksi aman Apache - memaksa Koneksi HTTPS' .
Untuk subdirektori tempat ini dalam file htaccess di direktori itu sendiri.
sumber
Memaksa akses melalui HTTPS sebenarnya dimungkinkan, selain menjadi langkah yang diperlukan dalam membuat situs Anda MITM, snooper- dan PEBKAC-proof. Seharusnya bukan tanggung jawab pengguna, itu tidak berhasil . Dorong pengguna Anda untuk menggunakan browser yang aman sebagai gantinya.
Memaksa HTTPS dilakukan melalui HSTS ( HTTP Strict-Transport-Security ). HSTS dasar aman setelah pertama kali pengguna mengakses situs Anda melalui HTTPS (di semua browser pendukung; IE tidak memiliki kemampuan ). HSTS yang dimuat sebelumnya selalu aman, dan mencakup peramban cepat-rilis modern (Chromium dan turunannya, Firefox).
Untuk gambaran umum yang lebih lengkap tentang keamanan HTTP (menangani url, pengalihan, cookie, dan konten campuran), lihat howto migrasi HTTPS ini . HSTS adalah langkah terakhir dalam migrasi progresif. Anda tidak benar-benar perlu mengikuti pesanan jika situs Anda masih baru.
Standar terkait: cookie aman (penting jika cookie Anda hidup lebih lama dari tajuk HSTS), cookie HttpOnly (saat Anda mengamankan cookie Anda), HPKP (untuk browser modern dan penyerang yang lebih banyak akal).
sumber