Szukałem w Google i StackOverflow, próbując znaleźć rozwiązanie tego problemu, ale wszystkie wydają się odnosić do ASP.NET itp.
Zwykle uruchamiam Linux na moich serwerach, ale dla tego jednego klienta korzystam z systemu Windows z IIS 7.5 (i Plesk 10). Z tego powodu jestem nieco obeznany z IIS i plikami web.config . W .htaccess
pliku można użyć warunków ponownego zapisu, aby wykryć, czy protokołem jest HTTPS i odpowiednio przekierować. Czy istnieje prosty sposób na osiągnięcie tego celu za pomocą pliku web.config, a nawet za pomocą zainstalowanego modułu „ URL Rewrite ”?
Nie mam doświadczenia z ASP.NET, więc jeśli jest to zaangażowane w rozwiązanie, proszę podać jasne kroki wdrażania.
Powodem, dla którego robię to z web.config, a nie PHP, jest to, że chciałbym wymusić HTTPS na wszystkich zasobach w witrynie.
Odpowiedzi:
Potrzebujesz modułu URL Rewrite, najlepiej v2 (nie mam zainstalowanego v1, więc nie mogę zagwarantować, że będzie tam działał, ale powinien).
Oto przykład takiego web.config - wymusi HTTPS dla WSZYSTKICH zasobów (przy użyciu stałego przekierowania 301):
PS To szczególne rozwiązanie nie ma nic wspólnego z ASP.NET/PHP ani żadną inną technologią, ponieważ jest wykonywane tylko przy użyciu modułu do przepisywania adresów URL - jest przetwarzane na jednym z początkowych / niższych poziomów - zanim żądanie dotrze do punktu, w którym kod zostaje stracony.
źródło
Strict-Transport-Security
nagłówek: en.wikipedia.org/wiki/HTTP_Strict_Transport_Security<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
<match url=".*"/>
do<match url="http://*.*" />
Dla osób korzystających z ASP.NET MVC. Możesz użyć RequireHttpsAttribute, aby wymusić, aby wszystkie odpowiedzi były HTTPS:
Inne rzeczy, które możesz chcieć zrobić, aby zabezpieczyć swoją witrynę:
Wymuś użycie tokenów zapobiegających fałszerstwom do korzystania z protokołu SSL / TLS:
Wymagaj, aby pliki cookie wymagały domyślnie HTTPS poprzez zmianę pliku Web.config:
Użyj pakietu NWebSec.Owin NuGet i dodaj następujący wiersz kodu, aby włączyć Strict Transport Security (HSTS) w całej witrynie. Nie zapomnij dodać dyrektywy Preload poniżej i przesłać swoją stronę do strony HSTS Preload . Więcej informacji tutaj i tutaj . Pamiętaj, że jeśli nie używasz OWIN, istnieje metoda Web.config, którą możesz przeczytać na stronie NWebSec .
Użyj pakietu NWebSec.Owin NuGet i dodaj następujący wiersz kodu, aby włączyć przypinanie klucza publicznego (HPKP) w całej witrynie. Więcej informacji tutaj i tutaj .
Uwzględnij schemat https we wszystkich używanych adresach URL. Nagłówek HTTP Content Security Policy (CSP) i integralność podrzędnych zasobów (SRI) nie działają dobrze, jeśli naśladujesz schemat w niektórych przeglądarkach. Lepiej jest wyraźnie powiedzieć o HTTPS. na przykład
Użyj szablonu projektu Visual Studio ASP.NET MVC Boilerplate, aby wygenerować projekt z tym wszystkim io wiele więcej wbudowanym. Możesz także wyświetlić kod w GitHub .
źródło
Aby wzmocnić odpowiedź LazyOne, oto wersja odpowiedzi z adnotacją.
Wyczyść wszystkie pozostałe reguły, które mogły być już zdefiniowane na tym serwerze. Utwórz nową regułę, która nazwiemy „Przekieruj wszystkie żądania do https”. Po przetworzeniu tej reguły nie przetwarzaj więcej reguł! Dopasuj wszystkie przychodzące adresy URL. Następnie sprawdź, czy wszystkie pozostałe warunki są spełnione: HTTPS jest WYŁĄCZONY. To tylko jeden warunek (ale upewnij się, że to prawda). Jeśli tak, wyślij stałe przekierowanie 301 z powrotem do klienta na adres
http://www.foobar.com/whatever?else=the#url-contains
. Nie dodawaj ciągu zapytania na końcu, ponieważ spowoduje to skopiowanie ciągu zapytania!To właśnie oznaczają właściwości, atrybuty i niektóre wartości.
MatchAll
), czy którykolwiek z warunków musi być spełniony (MatchAny
); podobny do AND vs OR.match
i jegoconditions
wszystkie są prawdziwe.redirect
(po stronie klienta) lubrewrite
(po stronie serwera).https://
dwie zmienne serwera.url
czy nie; w tym przypadku ustawiamy wartość false, ponieważ{REQUEST_URI}
już zawiera.Zmienne serwera to
{HTTPS}
który jest alboOFF
czyON
.{HTTP_HOST}
jestwww.mysite.com
i{REQUEST_URI}
zawiera resztę URI, np/home?key=value
#fragment
(patrz komentarz LazyOne).Zobacz także: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
źródło
/home?key=value#fragment
) nie jest ustawiona na serwerze przez przeglądarki, ponieważ powinna być używana lokalnie.http://www.example.com/members#oops
Żądanie zostanie wysłane, nahttp://www.example.com/members
które następnie zostanie przekierowany do wersji HTTPS whttps://www.example.com/members
- przeglądarkaPrzyjęta odpowiedź nie działała dla mnie. Postępowałem zgodnie z instrukcjami na tym blogu .
Kluczowym punktem, którego mi brakowało, było to, że musiałem pobrać i zainstalować narzędzie URL Rewrite dla IIS. Znalazłem to tutaj . Wynik był następujący.
źródło
W .Net Core postępuj zgodnie z instrukcjami na https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl
W pliku startup.cs dodaj:
Aby przekierować Http na Https, dodaj następujące w pliku startup.cs
źródło
Doskonała biblioteka NWebsec może uaktualnić twoje żądania z HTTP do HTTPS za pomocą swojego
upgrade-insecure-requests
znacznika wWeb.config
:źródło
Nie mogłem instalować przepisywania adresów URL w moim środowisku, więc znalazłem inną ścieżkę.
Dodając to do mojego pliku web.config, dodałem błąd przepisywania i działałem na IIS 7.5:
Następnie postępując zgodnie z radą tutaj: https://www.sslshopper.com/iis7-redirect-http-to-https.html
Utworzyłem plik HTML, który przekierowuje (redirectToHttps.html):
Mam nadzieję, że ktoś uzna to za przydatne, ponieważ nie mogłem znaleźć wszystkich elementów w jednym miejscu nigdzie indziej.
źródło
Prostym sposobem jest powiedzieć IIS wysłać swój własny plik błędu HTTP żądań. Plik może następnie zawierać przekierowanie meta, przekierowanie JavaScript i instrukcje z łączem itp. Co ważne, nadal możesz zaznaczyć opcję „Wymagaj SSL” dla witryny (lub folderu), a to zadziała.
źródło