Saya telah mencari di sekitar Google dan StackOverflow mencoba menemukan solusi untuk ini, tetapi mereka semua tampaknya berhubungan dengan ASP.NET dll.
Saya biasanya menjalankan Linux di server saya tetapi untuk klien yang satu ini saya menggunakan Windows dengan IIS 7.5 (dan Plesk 10). Ini menjadi alasan mengapa saya sedikit tidak terbiasa dengan file IIS dan web.config . Dalam .htaccess
file Anda dapat menggunakan kondisi penulisan ulang untuk mendeteksi apakah protokolnya adalah HTTPS dan mengarahkan ulang sesuai itu. Apakah ada cara sederhana untuk mencapai ini menggunakan file web.config, atau bahkan menggunakan modul ' URL Rewrite ' yang telah saya instal?
Saya tidak punya pengalaman dengan ASP.NET jadi jika ini terlibat dalam solusi maka harap sertakan langkah-langkah yang jelas tentang cara mengimplementasikan.
Alasan saya melakukan ini dengan web.config dan bukan PHP adalah karena saya ingin memaksakan HTTPS pada semua aset di dalam situs.
Jawaban:
Anda memerlukan modul Penulisan Ulang URL, lebih disukai v2 (Saya belum menginstal v1, jadi tidak dapat menjamin bahwa itu akan berfungsi di sana, tetapi seharusnya).
Berikut adalah contoh web.config tersebut - ini akan memaksa HTTPS untuk SEMUA sumber daya (menggunakan 301 Permanent Redirect):
PS Solusi khusus ini tidak ada hubungannya dengan ASP.NET/PHP atau teknologi lainnya karena dilakukan hanya menggunakan modul penulisan ulang URL - diproses di salah satu level awal / bawah - sebelum permintaan sampai ke titik di mana kode Anda dieksekusi.
sumber
Strict-Transport-Security
header: en.wikipedia.org/wiki/HTTP_Strict_Transport_Security<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
<match url=".*"/>
ke<match url="http://*.*" />
Bagi yang menggunakan ASP.NET MVC. Anda dapat menggunakan RequireHttpsAttribute untuk memaksa semua tanggapan menjadi HTTPS:
Hal-hal lain yang mungkin juga ingin Anda lakukan untuk membantu mengamankan situs Anda:
Paksa token Anti-Pemalsuan untuk menggunakan SSL / TLS:
Memerlukan Cookie untuk meminta HTTPS secara default dengan mengubah file Web.config:
Gunakan paket NWebSec.Owin NuGet dan tambahkan baris kode berikut untuk mengaktifkan Keamanan Transportasi Ketat (HSTS) 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 .
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 .
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 secara eksplisit tentang HTTPS. misalnya
Gunakan template proyek ASP.NET MVC Boilerplate Visual Studio untuk menghasilkan proyek dengan semua ini dan banyak lagi yang sudah ada di dalamnya. Anda juga dapat melihat kode di GitHub .
sumber
Untuk menambah jawaban LazyOne, berikut adalah versi jawabannya.
Hapus semua aturan lain yang mungkin sudah ditetapkan di server ini. Buat aturan baru, yang akan kami beri nama "Redirect semua permintaan ke https". Setelah memproses aturan ini, jangan memproses aturan lagi! Cocokkan semua URL yang masuk. Kemudian periksa apakah semua kondisi lain ini benar: HTTPS dimatikan. Yah, itu hanya satu syarat (tapi pastikan itu benar). Jika ya, kirim kembali pengalihan 301 Permanen ke klien di
http://www.foobar.com/whatever?else=the#url-contains
. Jangan tambahkan string kueri di akhir itu, karena itu akan menduplikasi string kueri!Inilah yang dimaksud dengan properti, atribut, dan beberapa nilai.
MatchAll
) atau salah satu syarat harus benar (MatchAny
); mirip dengan AND vs OR.match
dan yangconditions
semua benar.redirect
(sisi klien) ataurewrite
(sisi server).https://
dengan dua variabel server.url
atau tidak; dalam hal ini, kami menetapkannya ke false, karena{REQUEST_URI}
sudah termasuk itu.Variabel server adalah
{HTTPS}
yang bisaOFF
atauON
.{HTTP_HOST}
adalahwww.mysite.com
, dan{REQUEST_URI}
termasuk sisa URI, mis/home?key=value
#fragment
(lihat komentar dari LazyOne).Lihat juga: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
sumber
/home?key=value#fragment
) tidak disetel ke server oleh peramban karena dimaksudkan untuk digunakan secara lokal.http://www.example.com/members#oops
Permintaan akan dikirimhttp://www.example.com/members
yang kemudian diarahkan ke versi HTTPS dihttps://www.example.com/members
- peramban sisanya)Jawaban yang diterima tidak berhasil untuk saya. Saya mengikuti langkah-langkah di blog ini .
Poin kunci yang hilang bagi saya adalah bahwa saya perlu mengunduh dan menginstal Alat Penulisan Ulang URL untuk IIS. Saya menemukannya di sini . Hasilnya adalah sebagai berikut.
sumber
Di .Net Core, ikuti instruksi di https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl
Di startup.cs Anda tambahkan yang berikut:
Untuk mengarahkan ulang Http ke Https, tambahkan berikut ini di startup.cs
sumber
Perpustakaan NWebsec yang sangat baik dapat meningkatkan permintaan Anda dari HTTP ke HTTPS menggunakan
upgrade-insecure-requests
tag -nya di dalamWeb.config
:sumber
Saya tidak diizinkan menginstal URL Menulis Ulang di lingkungan saya, jadi, saya menemukan jalur lain.
Menambahkan ini ke web.config saya menambahkan penulisan ulang kesalahan dan bekerja pada IIS 7.5:
Kemudian, ikuti saran di sini: https://www.sslshopper.com/iis7-redirect-http-to-https.html
Saya membuat file html yang melakukan redirect (redirectToHttps.html):
Saya harap seseorang menemukan ini berguna karena saya tidak dapat menemukan semua bagian di satu tempat di tempat lain.
sumber
Cara sederhana adalah memberi tahu IIS untuk mengirim file kesalahan khusus Anda untuk permintaan HTTP. File kemudian dapat berisi redirect meta, redirect JavaScript dan instruksi dengan tautan, dll. Yang penting, Anda masih dapat memeriksa "Memerlukan SSL" untuk situs (atau folder) dan ini akan berfungsi.
sumber