Bagaimana mencegah akses ke situs web tanpa koneksi SSL?

11

Saya memiliki situs web yang memiliki sertifikat SSL yang diinstal, sehingga jika saya mengakses situs web menggunakan httpsalih-alih httpsaya akan dapat terhubung menggunakan koneksi yang aman.

Namun, saya perhatikan bahwa saya masih dapat mengakses situs web secara tidak aman, yaitu. dengan menggunakan httpbukan https.

Bagaimana saya bisa mencegah orang menggunakan situs web dengan cara yang tidak aman?

Jika saya memiliki direktori di situs web, mis. samples/, dapatkah saya mencegah koneksi tidak aman ke direktori ini saja?

CJ7
sumber

Jawaban:

12

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.comtidak 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 80dalam 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 Locationatau Directory), gunakan SSLRequireSSLdirektif : 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_rewriteatau dalam kode Anda (jika itu aplikasi). Sesuatu seperti ini harus dilakukan, untuk lokasi tertentu ( lihat HTTPSvariabel 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 httpbukan https.

Ini juga terdengar seperti Anda menggunakan konfigurasi yang sama untuk keduanya httpdan https. Jika Anda menggunakan Apache Httpd, saya akan menyarankan memecah konfigurasi menjadi dua VirtualHosts 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).

Bruno
sumber
Informasi bagus, bagaimana gmail melakukan ini? - dari tampilan hal-hal yang mereka paksakan https.
toomanyairmiles
3
Mereka menggunakan pengalihan. Ini berfungsi dengan baik, asalkan Anda, seperti yang diharapkan pengguna https://mail.google.com. Jika, sebagai pengguna, Anda melihatnya berfungsi dengan baik http://mail.google.com, mungkin ada MITM yang mengesahkan permintaan ke yang asli https://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.
Bruno
Saya telah melihat beberapa skrip PHP yang akan memverifikasi jika terhubung dengan HTTPS dan mengalihkan jika tidak menggunakan SSL ke alamat HTTPS. Ini, tentu saja, bukan tugas yang mudah kecuali Anda membangun situs Anda sekarang.
Penguin Anonim
@AnnonomusPerson, itulah prinsip yang persis sama dan itulah yang dilakukan aturan penulisan ulang dari HTTP ke HTTPS. Apakah Anda melakukannya secara terprogram atau dengan konfigurasi tidak masalah, itu masih merupakan pengalihan dengan permintaan awal di HTTP biasa, yang menghadirkan masalah yang sama.
Bruno
3

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.

RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L] 
toomanyairmiles
sumber
Bisakah Anda mewujudkan ini hanya untuk sub-direktori tertentu?
CJ7
@CraigJ maaf, ketinggalan bagian sub-direktori, jawab diperbarui.
toomanyairmiles
3
Meskipun ini mengurangi risiko sedikit, ini tidak bekerja melawan penyerang MITM aktif.
Bruno
0

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

Tobu
sumber