Paksa seluruh situs https tanpa mengalihkan http ke https

14

Ada banyak diskusi saat saya sedang meneliti bagaimana membuat seluruh situs saya https. Jawaban terbanyak adalah mengarahkan http ke https (file .htaccess), yang tidak bagus, karena tidak baik melakukan pekerjaan yang sama dua kali (dua permintaan). Juga, "man in the middle" pertama kali mengambil http, dan saya ingin situs saya langsung di https. Apakah ada cara lain untuk membuat seluruh situs Anda https, dan bagaimana cara melakukannya? Misalnya, ketika pengguna mengetik di example.com, example.com itu secara otomatis masuk ke https, tanpa mengalihkan dari http atau yang lainnya terlebih dahulu?

Marko Tamburic
sumber
jika Anda tidak ingin orang diarahkan ke https, apa yang Anda inginkan terjadi?
Michael Hampton
@MichaelHampton Mungkin saya mengajukan pertanyaan pemula, tapi saya ingin praktis "menghapus" http, dan satu-satunya yang ada adalah https. Atau jika ini tidak mungkin, saya bisa menggunakan pengalihan jika cukup baik untuk keamanan. Saya mendengar bahwa pengalihan http-> https tidak begitu baik karena masih http dan lalu lintas dapat dicegat selama pengalihan.
Marko Tamburic
Pengalihan permanen HTTP 301 adalah teman Anda, tapi jangan lupa untuk mengatur kedaluwarsa.
Marcel
Anda cukup menghapus http. Tetapi kemudian, pengguna hanya mendapat koneksi menolak pesan, jika dia tidak memasukkan https: // Untuk beberapa situs ini lebih baik, karena keamanan lebih tinggi. Jika ada versi http yang tersedia, bisa terjadi cookie dikirim dengan permintaan pertama yang tidak dienkripsi. Untuk hal-hal seperti sistem email perusahaan, https saja + pelatihan pengguna tidak apa-apa, untuk situs umum Anda mungkin akan kehilangan banyak pengunjung.
Josef berkata Reinstate Monica
Afaik itu menjadi mungkin dengan HTTP2, namun masih tidak akan menghindari serangan striping ssl (dijelaskan dalam jawaban di bawah).
peterh

Jawaban:

20

Tidak. Anda tidak dapat secara ajaib membuat browser pengunjung memilih protokol yang tepat. Redirect adalah cara untuk melakukannya.

Jenny D
sumber
1
Untuk lebih memperluas jawaban ini, pertimbangkan untuk menggunakan penulisan ulang URL dan kode status 301 seperti yang ditunjukkan Mark Henderson di sini: serverfault.com/questions/570288/…
Ryan Ries
22

http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security memungkinkan server Anda menunjukkan bahwa domain hanya dapat diakses melalui HTTPS. Ini hanya berlaku untuk permintaan berikutnya, sehingga akan ada pemuatan HTTP awal, tetapi permintaan di masa depan akan memuat HTTPS bahkan jika seseorang secara eksplisit mengetik HTTP.

IE belum mendukungnya, tetapi semua jurusan lain melakukannya.

ceejayoz
sumber
Itu masih tidak melindungi terhadap permintaan pertama.
Jenny D
3
@ Jenny, saya sudah mengatakan itu dalam jawaban saya.
ceejayoz
@ JennyD Apa yang Anda maksud dengan "melindungi"? MiM tidak dapat melakukan apa pun terhadap pengalihan http -> https, kecuali mereka mengacaukan dns / routing lokal dan memalsukan seluruh domain Anda. Dalam hal ini, tidak masalah apa yang Anda lakukan, karena server Anda tidak pernah diakses.
Peringatan Merah
2
@ JennyD Yah, HSTS benar-benar solusi yang lebih baik daripada posting Anda, yang mengatakan "pengalihan adalah cara untuk melakukannya". Pengalihan dapat MITMed kapan saja. Arahan ulang dengan HSTS hanya dapat MITMed setahun sekali per pengguna + browser (atau apa pun waktu kedaluwarsa ada di header) - semua waktu lain itu tidak diminta.
ceejayoz
1
@MarkoTamburic Tidak ada alasan Anda tidak bisa menggabungkan keduanya.
ceejayoz
7

Seperti yang dikatakan orang lain, Anda tidak dapat memaksa pengguna untuk memilih protokol yang tepat. Tetapi ketika pengguna mencoba menggunakan HTTP, apa yang harus Anda lakukan? Pengalihan juga tidak cukup, karena penyerang yang duduk di antara Anda dan klien dapat mencegat pengalihan, sehingga klien tidak pernah melihatnya. Klien akan terus mengirim HTTP polos, dan penyerang akan menghapus lapisan SSL dari server ( serangan stripping SSL ).

Satu-satunya cara pasti untuk mencegah itu adalah tidak melayani HTTP sama sekali . Jangan jawab pada port 80, kecuali mungkin untuk menyajikan halaman teks biasa yang mengarahkan pengguna untuk mencoba lagi dengan HTTPS (tetapi tidak memberikan tautan, yang dapat dimanipulasi penyerang). Ini akan memaksa pengguna untuk mengetik di https://browser mereka, sehingga mereka akan memulai koneksi dengan SSL dan mencegah serangan MITM.

Andrew Schulman
sumber
3
Ini adalah trade-off, karena sebagian besar pengguna tidak akan mengetik https://. Sebaliknya, mereka akan mengatakan "huh, situsnya rusak" dan pergi. Skenario kasus terbaik mungkin adalah www.example.commerespons HTTP dan HTTPS, tetapi menjalankan aplikasi itu sendiri pada sesuatu seperti admin.example.comhanya dengan HTTPS.
ceejayoz
Sepakat. Dalam praktiknya, hampir tidak ada yang melakukan ini.
Andrew Schulman
Saya tidak benar-benar melihat bagaimana itu akan menjadi bukti MiM lagi. Jika orang di tengah dapat memodifikasi hyperlink Anda ke tempat lain, itu berarti dia mengendalikan paket masuk pengguna. Dia dapat dengan mudah mengarahkan ulang ke situsnya, atau menambahkan hyperlink apa pun yang diinginkannya, terlepas dari seperti apa situs itu seharusnya.
Red Alert
Tapi tidak, secara teori, jika klien memulai koneksi dengan SSL.
Andrew Schulman
3
itu benar - tetapi jika klien memulai dengan SSL, OP tidak memiliki masalah. Masalahnya adalah ketika mereka memulai tanpa SSL, dan tidak ada cara yang dapat diandalkan untuk membawanya ke SSL jika ada MiM yang secara aktif menyabotase itu.
Red Alert
1

ceejayoz memiliki jawaban terbaik untuk mencegah serangan yang disebutkan secara khusus di sini, tetapi saya ingin juga menunjukkan apa yang banyak orang di sini tidak temukan, yang pada dasarnya adalah bagian HTTP yang sudah diketahui oleh pihak lain. Anda ingin melakukan pengalihan 301 permanen. Ini memberi tahu klien untuk membuat permintaan lebih lanjut ke alamat baru. Jadi ya, jika seseorang mengetik URL yang salah, mereka akan membuat 2 permintaan TETAPI, di masa depan, klien yang baik seharusnya mendeteksi permintaan ke URL itu dan membuat permintaan yang benar sebagai gantinya untuk mencegah permintaan yang lebih sia-sia. Masalahnya adalah ini hanya untuk URL yang tepat. HSTS meningkatkan skema ini dengan juga mengatakan, 'untuk n detik berikutnya juga jangan izinkan koneksi yang tidak aman dari domain ini'.

Pengguna tidak boleh mengunjungi situs sensitif di lokasi yang tidak aman. Mereka khususnya tidak boleh mendaftar untuk mereka di lokasi yang tidak aman. Ini adalah prinsip dasar keamanan pengguna yang harus diajarkan seperti, 'jangan membuka lampiran dari sumber yang tidak tepercaya'. Yang benar-benar jawaban terbaik untuk mencegah serangan MiM untuk situs yang belum pernah dikunjungi.

Sebagai catatan, beberapa browser meningkatkan ini dengan juga mengatakan situs-situs tertentu yang dikenal selalu menggunakan HSTS. Sayangnya, Anda tidak bisa menambahkan diri sendiri ke daftar ini dengan mudah.

Bacaan lebih lanjut: http://coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-sutions/

http://dev.chromium.org/sts

Krowe
sumber