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).