Sekitar 6 bulan yang lalu saya meluncurkan situs di mana setiap permintaan harus lebih dari https. Satu-satunya cara pada saat itu saya dapat menemukan untuk memastikan bahwa setiap permintaan ke halaman lebih dari https adalah dengan memeriksanya di acara memuat halaman. Jika permintaan tidak melebihi http, saya akan response.redirect (" https://example.com ")
Apakah ada cara yang lebih baik - idealnya beberapa pengaturan di web.config?
Jawaban:
Silakan gunakan HSTS (HTTP Strict Transport Security)
dari http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx
Jawaban Asli (diganti dengan yang di atas pada 4 Desember 2015)
pada dasarnya
yang akan masuk dalam global.asax.cs (atau global.asax.vb)
saya tidak tahu cara untuk menentukannya di web.config
sumber
Hal lain yang dapat Anda lakukan adalah menggunakan HSTS dengan mengembalikan header "Strict-Transport-Security" ke browser. Peramban harus mendukung ini (dan saat ini, terutama Chrome dan Firefox yang mendukung), tetapi itu berarti bahwa setelah ditetapkan, peramban tidak akan membuat permintaan ke situs melalui HTTP dan sebaliknya akan menerjemahkannya ke permintaan HTTPS sebelum mengeluarkannya . Coba ini dalam kombinasi dengan pengalihan dari HTTP:
Browser yang tidak mengetahui HSTS hanya akan mengabaikan header tetapi masih akan tertangkap oleh pernyataan beralih dan dikirim ke HTTPS.
sumber
if(!Request.IsLocal)
agar tidak merusak debugging.Modul IIS7 akan memungkinkan Anda mengarahkan ulang.
sumber
Bagi yang menggunakan ASP.NET MVC. Anda dapat menggunakan yang berikut untuk memaksa SSL / TLS melalui HTTPS di seluruh situs dengan dua cara:
Jalan yang Keras
1 - Tambahkan RequireHttpsAttribute ke filter global:
2 - Paksa token Anti-Pemalsuan untuk menggunakan SSL / TLS:
3 - Membutuhkan Cookie untuk meminta HTTPS secara default dengan mengubah file Web.config:
4 - Gunakan paket NWebSec.Owin NuGet dan tambahkan baris kode berikut untuk mengaktifkan Keamanan Transportasi Ketat di seluruh situs. Jangan lupa untuk menambahkan arahan Preload di bawah ini dan kirimkan situs Anda ke situs Preload HSTS . Informasi lebih lanjut di sini dan di sini . Perhatikan bahwa jika Anda tidak menggunakan OWIN, ada metode Web.config yang dapat Anda baca di situs NWebSec .
5 - Gunakan paket NWebSec.Owin NuGet dan tambahkan baris kode berikut untuk mengaktifkan Pinning Kunci Publik (HPKP) di seluruh situs. Informasi lebih lanjut di sini dan di sini .
6 - Sertakan skema https dalam URL apa pun yang digunakan. Kebijakan Keamanan Konten (CSP) HTTP header dan Subresource Integrity (SRI) tidak bermain bagus ketika Anda meniru skema di beberapa browser. Lebih baik untuk eksplisit tentang HTTPS. misalnya
Cara Mudah
Gunakan template proyek ASP.NET MVC Boilerplate Visual Studio untuk menghasilkan sebuah proyek dengan semua ini dan lebih banyak lagi bawaannya. Anda juga dapat melihat kode pada GitHub .
sumber
<authentication mode="Forms">
, di dalam Anda harus memiliki<forms requireSSL="true">
RequireHttpsAttribute
melakukan redirect. Selama Anda memilikinya harus baik-baik saja.Jika Anda tidak dapat mengatur ini di IIS untuk alasan apa pun, saya akan membuat modul HTTP yang melakukan pengalihan untuk Anda:
Kemudian cukup kompilasi ke DLL, tambahkan sebagai referensi ke proyek Anda dan letakkan ini di web.config:
sumber
app.BeginRequest += new OnBeginRequest;
di dalamInit
metode dan diOnBeginRequest
akan berisi apaInit
yang berisi metode saat ini. Apakah Anda yakin modul ini berfungsi seperti yang diharapkan?Yang perlu Anda lakukan adalah:
1) Tambahkan kunci di dalam web.config, tergantung pada server produksi atau tahap seperti di bawah ini
2) Di dalam file Global.asax Anda tambahkan metode di bawah ini.
sumber
Jika dukungan SSL tidak dapat dikonfigurasi di situs Anda (mis. Harus dapat mengaktifkan / menonaktifkan https) - Anda dapat menggunakan atribut [RequireHttps] pada tindakan pengontrol / pengontrol yang ingin Anda amankan.
sumber
Ini juga tergantung pada merek penyeimbang Anda, untuk mux web, Anda harus mencari header http
X-WebMux-SSL-termination: true
untuk mengetahui bahwa lalu lintas masuk adalah ssl. detail di sini: http://www.cainetworks.com/support/redirect2ssl.htmlsumber
Untuk @ Jo di atas, "Ini memberi saya loop redirect. Sebelum saya menambahkan kode itu berfungsi dengan baik. Ada saran? - Joe 8 '11 pada 4:13"
Ini juga terjadi pada saya dan yang saya yakini sedang terjadi adalah ada penyeimbang beban yang menghentikan permintaan SSL di depan server Web. Jadi, situs web saya selalu berpikir permintaan itu "http", bahkan jika browser asli memintanya "https".
Saya akui ini agak bangkrut, tetapi yang berhasil bagi saya adalah menerapkan properti "JustRedirected" yang dapat saya manfaatkan untuk mengetahui bahwa orang tersebut sudah dialihkan sekali. Jadi, saya menguji untuk kondisi tertentu yang menjamin pengalihan dan, jika dipenuhi, saya mengatur properti ini (nilai disimpan dalam sesi) sebelum pengalihan. Bahkan jika kondisi http / https untuk redirection terpenuhi untuk kedua kalinya, saya memotong logika redirection dan mereset nilai sesi "JustRedirected" menjadi false. Anda akan memerlukan logika pengujian bersyarat Anda sendiri, tetapi berikut ini adalah implementasi sederhana dari properti:
sumber
Saya akan memasukkan dua sen saya. JIKA Anda memiliki akses ke sisi server IIS, maka Anda dapat memaksa HTTPS dengan menggunakan binding protokol. Misalnya, Anda memiliki situs web yang disebut Blah . Di IIS Anda akan menyiapkan dua situs: Blah , dan Blah (Redirect) . Untuk Blah hanya mengkonfigurasi
HTTPS
penjilidan (danFTP
jika Anda perlu, pastikan untuk memaksanya melalui koneksi yang aman juga). Untuk Blah (Redirect) hanya konfigurasikanHTTP
binding. Terakhir, di bagian HTTP Redirect untuk folder root Blah (Redirect) pastikan untuk mengatur 301 redirect ke , dengan tujuan yang tepat diaktifkan. Pastikan setiap situs di IIS menunjukkannyasendiri jika tidak maka semua akan kacau. Pastikan juga memilikinyahttps://blah.com
Web.configHSTS
dikonfigurasi pada situs HTTPS Anda sehingga permintaan berikutnya oleh browser selalu dipaksa ke HTTPS dan tidak ada pengalihan yang terjadi.sumber
Ini adalah jawaban yang lebih lengkap berdasarkan @Troy Hunt's. Tambahkan fungsi ini ke
WebApplication
kelas Anda diGlobal.asax.cs
:(Untuk mengaktifkan SSL pada bangunan lokal Anda, aktifkan di Properties dock untuk proyek)
sumber
-> Cukup ADD [RequireHttps] di atas kelas publik HomeController: Controller.
-> Dan tambahkan GlobalFilters.Filters.Add (RequireHttpsAttribute ()) baru; dalam metode 'protected void Application_Start ()' dalam file Global.asax.cs.
Yang memaksa seluruh aplikasi Anda ke HTTPS.
sumber
Saya menghabiskan beberapa waktu mencari praktik terbaik yang masuk akal dan menemukan yang berikut ini berfungsi dengan baik untuk saya. Saya berharap ini akan menyelamatkan Anda kapan-kapan.
Menggunakan file Config (misalnya situs web asp.net) https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and- lebih tinggi/
atau di server Anda sendiri https://www.sslshopper.com/iis7-redirect-http-to-https.html
[JAWABAN SINGKAT] Cukup Kode di bawah ini masuk ke dalam
sumber
Di IIS10 (Windows 10 dan Server 2016), dari versi 1709 dan seterusnya, ada opsi baru yang lebih sederhana untuk mengaktifkan HSTS untuk situs web.
Microsoft menjelaskan keuntungan dari pendekatan baru di sini , dan memberikan banyak contoh berbeda tentang bagaimana menerapkan perubahan secara terprogram atau dengan secara langsung mengedit file ApplicationHost.config (yang seperti web.config tetapi beroperasi pada tingkat IIS, daripada tingkat situs individu ). ApplicationHost.config dapat ditemukan di C: \ Windows \ System32 \ inetsrv \ config.
Saya telah menjabarkan dua metode contoh di sini untuk menghindari pembusukan tautan.
Metode 1 - Edit file ApplicationHost.config langsung di antara
<site>
tag, tambahkan baris ini:Metode 2 - Baris Perintah: Jalankan perintah berikut dari prompt perintah yang ditinggikan (yaitu mouse kanan di CMD dan jalankan sebagai administrator). Ingatlah untuk menukar Contoso dengan nama situs Anda seperti yang muncul di IIS Manager.
Metode lain yang ditawarkan Microsoft dalam artikel itu mungkin pilihan yang lebih baik jika Anda berada di lingkungan yang dihosting di mana Anda memiliki akses terbatas.
Perlu diingat bahwa IIS10 versi 1709 tersedia di Windows 10 sekarang, tetapi untuk Windows Server 2016 ini berada di jalur rilis yang berbeda, dan tidak akan dirilis sebagai paket patch atau layanan. Lihat di sini untuk rincian tentang 1709.
sumber
Jika Anda menggunakan ASP.NET Core, Anda dapat mencoba paket nuget SaidOut.AspNetCore.HttpsWithStrictTransportSecurity.
Maka Anda hanya perlu menambahkan
Ini juga akan menambahkan header HTTP StrictTransportSecurity ke semua permintaan yang dibuat menggunakan skema https.
Contoh kode dan dokumentasi https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code
sumber