Czy istnieje sposób na usunięcie nagłówka odpowiedzi „Server” z usług IIS7? Jest kilka artykułów pokazujących, że używając HttpModules możemy osiągnąć to samo. Będzie to pomocne, jeśli nie mamy uprawnień administratora do serwera. Nie chcę też pisać filtru ISAPI.
Mam uprawnienia administratora do mojego serwera. Więc nie chcę robić powyższych rzeczy. Więc proszę, pomóż mi zrobić to samo.
Odpowiedzi:
Dodaj to do swojego global.asax.cs:
źródło
NullReferenceException
w Cassini, jeśli polegaszHttpContext.Current
. Ten wpis na blogu pokazuje, jak to zrobić, unikając zrywania wsparcia Cassini, jeśli jest to dla Ciebie ważne.PreSendRequestHeaders
klasy w klasie implementującejIHttpModule
lubGlobal.asax
. Byłem świadkiem zdarzenia zawieszającego aplikację na serwerze pod wpływem stresu.BeginRequest
Wydarzenie powinno działać, aby dokonać zmian nagłówka odpowiedzi. Zobacz hanselman.com/blog/ChecklistWhatNOTToDoInASPNET.aspx .W IIS7 musisz użyć modułu HTTP. Zbuduj następujące elementy jako bibliotekę klas w VS:
Następnie dodaj następujące elementy do pliku web.config lub skonfiguruj go w usługach IIS (jeśli konfigurujesz w usługach IIS, zestaw musi znajdować się w GAC).
źródło
HttpApplication
TheHttpRequest
TheHttpContext
, aHttpResponse
nie sąnull
, a także sprawdzenie, żeHttpRequest.IsLocal
jestfalse
.PreSendRequestHeaders
może spowodować problemy z HttpCacheModule , powinieneśPostReleaseRequestState
zamiast tego użyć czegoś podobnego .Po włączeniu modułu ponownego zapisywania adresów URL w wersji 2.0 dla usług IIS (UrlRewrite) w sekcji konfiguracji
<configuration>
➡<system.webServer>
➡<rewrite>
dodaj regułę ruchu wychodzącego:źródło
rewrite
węzłemsystem.webServer
. Uważaj, spowoduje to awarię witryny, jeśli UrlRewrite nie jest zainstalowany na serwerze. I lepiej najpierw użyj konsoli konfiguracji IIS, aby sprawdzić, jak zapisuje te węzły konfiguracyjne.Scott Mitchell podaje w poście na blogu rozwiązania do usuwania niepotrzebnych nagłówków .
Jak już wspomniano w innych odpowiedziach, w przypadku
Server
nagłówka istnieje rozwiązanie modułu http lub rozwiązanie web.config dla usług IIS 10+ lub zamiast tego można użyć URLRewrite do jego wyczyszczenia .Najbardziej praktycznym rozwiązaniem dla aktualnej konfiguracji (IIS 10 +) jest użycie
removeServerHeader
w pliku web.config:Ponieważ
X-AspNet-Version
iX-AspNetMvc-Version
, zapewnia lepszy sposób niż usuwanie ich z każdej odpowiedzi: po prostu nie generowanie ich wcale.Służy
enableVersionHeader
do wyłączaniaX-AspNet-Version
w pliku web.configUżyj
MvcHandler.DisableMvcResponseHeader
w zdarzeniu .Net Application_Start do wyłączeniaX-AspNetMvc-Version
Na koniec usuń w konfiguracji usług IIS
X-Powered-By
niestandardowy nagłówek w pliku web.config.Uważaj, jeśli masz ARR (Routing żądań aplikacji), doda również swój własny
X-Powered-By
, który nie zostanie usunięty przez niestandardowe ustawienia nagłówków. Ten musi zostać usunięty przez Menedżera IIS, konfigurację Edytora w katalogu głównym IIS (nie w lokacji): przejdź dosystem.webServer/proxy
węzła i ustawarrResponseHeader
nafalse
. Po anIISReset
jest brany pod uwagę.(Znalazłem ten tutaj , z wyjątkiem tego, że ten post dotyczy starego sposobu konfigurowania usług IIS 6.0).
Nie zapominaj, że rozwiązanie przez kod aplikacji nie dotyczy domyślnie nagłówka generowanego na statycznej zawartości (możesz aktywować,
runAllManagedModulesForAllRequests
aby to zmienić, ale powoduje to, że wszystkie żądania uruchamiają potok .Net). Nie stanowi to problemu,X-AspNetMvc-Version
ponieważ nie jest dodawane do zawartości statycznej (przynajmniej jeśli żądanie statyczne nie jest uruchamiane w potoku .Net).Uwaga dodatkowa: jeśli celem jest zamaskowanie używanej technologii, należy również zmienić standardowe nazwy plików cookie .Net (
.ASPXAUTH
jeśli aktywowano uwierzytelnianie formularzy (użyjname
atrybutu wforms
tagu w web.config),ASP.NET_SessionId
(użyj<sessionState cookieName="yourName" />
w web.config podsystem.web
tagiem),__RequestVerificationToken
(zmień to kodem zAntiForgeryConfig.CookieName
, ale niestety nie dotyczy to ukrytych danych wejściowych, które ten system generuje w html)).źródło
W rzeczywistości zakodowane moduły i przykłady Global.asax pokazane powyżej działają tylko dla prawidłowych żądań.
Na przykład, dodaj <na końcu adresu URL, a otrzymasz stronę „Złe żądanie”, która nadal ujawnia nagłówek serwera. Wielu programistów to przeoczy.
Pokazane ustawienia rejestru również nie działają. URLScan to JEDYNY sposób usunięcia nagłówka „server” (przynajmniej w IIS 7.5).
źródło
Lub dodaj web.config:
źródło
X-AspNet-Version
iX-AspNetMvc-Version
nagłówek. Wiem, że ten sposób nie zawsze działa (jeśli kiedykolwiek zadziała). Zobacz odpowiedź @Frederic, aby uzyskać bardziej niezawodny sposób ich usunięcia.Ta
web.config
konfiguracja działa w celu usunięcia wszystkich niepotrzebnych nagłówków z odpowiedzi ASP.NET (przynajmniej począwszy od IIS 10):Należy pamiętać, że powoduje to ukrycie wszystkich nagłówków „aplikacji”, podobnie jak wszystkie inne podejścia. Jeśli np. Przejdziesz na jakąś domyślną stronę lub stronę błędu wygenerowaną przez same IIS lub ASP.NET poza twoją aplikacją, te reguły nie będą miały zastosowania. Idealnie więc powinny znajdować się na poziomie głównym w usługach IIS, a ten próg może pozostawić pewne odpowiedzi na błędy w samych usługach IIS.
PS W IIS 10 jest błąd, który powoduje, że czasami wyświetla nagłówek serwera, nawet przy poprawnej konfiguracji. Powinno to już zostać naprawione, ale IIS / Windows musi zostać zaktualizowany.
źródło
Oprócz odpowiedzi przepisywania adresu URL , oto pełny kod XML dla
web.config
Przepisywanie adresu URL
źródło
Aby usunąć
Server:
nagłówek, przejdź doGlobal.asax
, znajdź / utwórzApplication_PreSendRequestHeaders
wydarzenie i dodaj wiersz w następujący sposób (dzięki BK i temu blogowi to również nie zawiedzie na Cassini / lokalnym dev):Jeśli chcesz uzyskać kompletne rozwiązanie do usuwania wszystkich powiązanych nagłówków na platformie Azure / IIS7, a także współpracujące z Cassini, zobacz ten link , który pokazuje najlepszy sposób wyłączania tych nagłówków bez korzystania z HttpModules lub URLScan.
źródło
Jeśli chcesz tylko usunąć nagłówek, możesz użyć skróconej wersji odpowiedzi lukiffera:
A potem w
Web.config
:źródło
Spróbuj ustawić
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader
wpis rejestru naREG_DWORD
z1
.źródło
OnPreSendRequestHeaders
program obsługi zdarzeń (patrz wyżej) nigdy z jakiegoś powodu nie jest uruchamiany.UrlScan może również usunąć nagłówek serwera, używając
AlternateServerName=
under[options]
.źródło
Kontynuując odpowiedź eddiegrovesa , w zależności od wersji URLScan, możesz zamiast tego wybrać
RemoveServerHeader=1
poniżej[options]
.Nie jestem pewien, w której wersji narzędzia URLScan ta opcja została dodana, ale była dostępna w wersji 2.5 i nowszych.
źródło
Znalazłem artykuł wyjaśniający, dlaczego musimy zarówno edytować rejestr, jak i używać narzędzia takiego jak UrlScan, aby poprawnie ustawić to w IIS. Śledziłem to na naszych serwerach i działa: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx . Jeśli używasz tylko UrlScan, ale nie zmieniasz rejestru, w czasie zatrzymywania usługi World Wide Publishing Service serwer zwróci odpowiedź http serwera z pliku HTTP.sys. Poniżej przedstawiono typowe pułapki korzystania z narzędzia UrlScan: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008
źródło
W IIS 10 korzystamy z rozwiązania podobnego do podejścia Drew, tj .:
I oczywiście dodaj odniesienie do tej biblioteki dll w swoim projekcie (ach), a także moduł w konfiguracjach, które chcesz:
WAŻNA UWAGA 1: To rozwiązanie wymaga zestawu aplikacji jako zintegrowanego;
WAŻNA UWAGA 2: będzie to miało wpływ na wszystkie odpowiedzi w aplikacji internetowej (w tym css i js);
źródło
Zbadałem to i metoda URLRewrite działa dobrze. Nie wydaje się, aby nigdzie dobrze znaleźć skrypt zmiany. Napisałem ten zgodny z programem PowerShell v2 i nowszym i przetestowałem go w usługach IIS 7.5.
źródło
Możesz dodać poniższy kod w pliku Global.asax.cs
źródło
Rozwiązanie zaproponowane powyżej w połączeniu działało u mnie z kolejnymi zmianami. Tutaj zamieszczam mój scenariusz i rozwiązanie.
U mnie chciałem usunąć następujące nagłówki:
Dodałem je do mojego global.asax:
Powyższe zdarzenie nie było uruchamiane, więc dodałem następujący do web.config i zadziałało.
aw celu usunięcia nagłówka wersji dodałem również do web.config:
Zmiany w web.config:
Mam nadzieję, że to pomoże!
źródło
Wypróbowałem wszystkie rzeczy tutaj i na kilku innych podobnych wątkach przepełnienia stosu.
Rozłączyłem się na chwilę, ponieważ zapomniałem wyczyścić pamięć podręczną przeglądarki po wprowadzeniu zmian w konfiguracji. Jeśli tego nie zrobisz, a plik znajduje się w lokalnej pamięci podręcznej, zwróci Ci go z oryginalnymi nagłówkami (duh).
Mam to głównie działające poprzez usunięcie runAllManagedModulesForAllRequests:
To usunęło zbędne nagłówki z większości plików statycznych, ale nadal otrzymywałem nagłówek „Server” w niektórych statycznych plikach w moim projekcie WebAPI w swagger.
W końcu znalazłem i zastosowałem to rozwiązanie, a teraz wszystkie niechciane nagłówki zniknęły:
https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85
który omawia jego kod, który jest tutaj:
https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5
To jest moduł kodu natywnego. Jest w stanie usunąć nagłówek serwera, a nie tylko wyczyścić wartość. Domyślnie usuwa:
źródło
Usługi IIS 7.5 i prawdopodobnie nowsze wersje mają tekst nagłówka przechowywany w
iiscore.dll
Używając edytora szesnastkowego, znajdź ciąg i słowo „Serwer”
53 65 72 76 65 72
po nim i zastąp je bajtami zerowymi. W IIS 7.5 wygląda to tak:W przeciwieństwie do innych metod nie powoduje to spadku wydajności. Nagłówek jest również usuwany ze wszystkich żądań, nawet błędów wewnętrznych.
źródło