Apakah ada cara untuk menghapus header respons "Server" dari IIS7? Ada beberapa artikel yang menunjukkan bahwa menggunakan HttpModules kita dapat mencapai hal yang sama. Ini akan membantu jika kita tidak memiliki hak admin ke server. Juga saya tidak ingin menulis filter ISAPI.
Saya memiliki hak admin ke server saya. Jadi saya tidak ingin melakukan hal-hal di atas. Jadi, tolong bantu saya melakukan hal yang sama.
Jawaban:
Tambahkan ini ke global.asax.cs Anda:
sumber
NullReferenceException
di Cassini jika Anda mengandalkanHttpContext.Current
. Posting blog ini menunjukkan bagaimana melakukannya sambil menghindari putusnya dukungan Cassini, jika itu penting bagi Anda.PreSendRequestHeaders
di kelas yang mengimplementasikanIHttpModule
atauGlobal.asax
. Saya telah menyaksikan acara membekukan aplikasi di server di bawah beban stres. TheBeginRequest
event harus bekerja untuk membuat perubahan respon header. Lihat hanselman.com/blog/ChecklistWhatNOTToDoInASPNET.aspx .Di IIS7 Anda harus menggunakan modul HTTP. Bangun berikut ini sebagai perpustakaan kelas di VS:
Kemudian tambahkan berikut ini ke web.config Anda, atau Anda mengkonfigurasinya dalam IIS (jika Anda mengkonfigurasi dalam IIS, rakitan harus berada di GAC).
sumber
HttpApplication
, yangHttpRequest
, yangHttpContext
, danHttpResponse
tidaknull
, serta memeriksa bahwaHttpRequest.IsLocal
adalahfalse
.PreSendRequestHeaders
dapat menyebabkan masalah dengan HttpCacheModule , Anda harus menggunakan sesuatu seperti ituPostReleaseRequestState
.Dengan mengaktifkan URL Rewrite Module Version 2.0 for IIS (UrlRewrite), di bagian konfigurasi
<configuration>
➡<system.webServer>
➡<rewrite>
tambahkan aturan keluar:sumber
rewrite
nodesystem.webServer
. Hati-hati, ini akan merusak situs Anda jika UrlRewrite tidak diinstal di server. Dan Anda sebaiknya menggunakan konsol konfigurasi IIS terlebih dahulu untuk memeriksa bagaimana ia menuliskan node konfigurasi tersebut.Scott Mitchell memberikan solusi dalam posting blog untuk menghapus header yang tidak perlu .
Seperti yang telah dikatakan di sini di jawaban lain, untuk
Server
header, ada solusi modul http , atau solusi web.config untuk IIS 10+ , atau Anda dapat menggunakan URLRewrite sebagai gantinya untuk mengosongkannya .Solusi paling praktis untuk penyiapan terkini (IIS 10 +) menggunakan
removeServerHeader
di web.config:Untuk
X-AspNet-Version
danX-AspNetMvc-Version
, ia memberikan cara yang lebih baik daripada menghapusnya di setiap respons: sama sekali tidak membuatnya sama sekali.Gunakan
enableVersionHeader
untuk menonaktifkanX-AspNet-Version
, di web.configGunakan
MvcHandler.DisableMvcResponseHeader
dalam acara .Net Application_Start untuk menonaktifkanX-AspNetMvc-Version
Dan terakhir, hapus dalam konfigurasi IIS
X-Powered-By
header kustom di web.config.Hati-hati, jika Anda memiliki ARR (Application Request Routing), itu juga akan menambahkan miliknya sendiri
X-Powered-By
, yang tidak akan dihapus oleh pengaturan tajuk khusus. Yang ini harus dihapus melalui Manajer IIS, konfigurasi Editor pada akar IIS (bukan di situs): bukasystem.webServer/proxy
node dan setelarrResponseHeader
kefalse
. SetelahIISReset
itu, itu diperhitungkan.(Saya telah menemukan yang ini di sini , kecuali posting ini tentang cara lama IIS 6.0 untuk mengkonfigurasi berbagai hal.)
Jangan lupa bahwa solusi dengan kode aplikasi tidak berlaku secara default untuk header yang dihasilkan pada konten statis (Anda dapat mengaktifkan
runAllManagedModulesForAllRequests
untuk mengubahnya, tetapi itu menyebabkan semua permintaan untuk menjalankan pipeline .Net). Ini bukan masalahX-AspNetMvc-Version
karena tidak ditambahkan pada konten statis (setidaknya jika permintaan statis tidak dijalankan di pipeline .Net).Catatan tambahan: ketika tujuannya adalah untuk menyelubungi teknologi yang digunakan, Anda juga harus mengubah nama cookie .Net standar (
.ASPXAUTH
jika formulir auth diaktifkan (gunakanname
atribut padaforms
tag di web.config),ASP.NET_SessionId
(gunakan<sessionState cookieName="yourName" />
di web.config di bawahsystem.web
tag),__RequestVerificationToken
(ubah itu dengan kode denganAntiForgeryConfig.CookieName
, tapi sayangnya tidak berlaku untuk input tersembunyi yang dihasilkan sistem ini di html)).sumber
Sebenarnya modul berkode dan contoh Global.asax yang ditunjukkan di atas hanya berfungsi untuk permintaan yang valid.
Misalnya, tambahkan <di akhir URL Anda dan Anda akan mendapatkan halaman "Permintaan buruk" yang masih memperlihatkan header server. Banyak pengembang mengabaikan ini.
Pengaturan registri yang ditampilkan juga tidak berfungsi. URLScan adalah satu-satunya cara untuk menghapus header "server" (setidaknya di IIS 7.5).
sumber
Atau tambahkan web.config:
sumber
X-AspNet-Version
danX-AspNetMvc-Version
header. Yang saya tahu adalah cara ini tidak selalu berhasil (jika pernah berhasil). Lihat jawaban @Frederic untuk cara yang lebih andal untuk menghapusnya.web.config
Penataan ini berfungsi untuk menghapus semua header yang tidak perlu dari respons ASP.NET (setidaknya mulai dari IIS 10):Harap dicatat bahwa ini menyembunyikan semua header untuk "aplikasi", seperti halnya semua pendekatan lainnya. Jika Anda misalnya mencapai beberapa halaman default atau halaman kesalahan yang dihasilkan oleh IIS itu sendiri atau ASP.NET di luar aplikasi Anda, aturan ini tidak akan berlaku. Jadi idealnya mereka harus berada di tingkat akar di IIS dan ambang itu mungkin meninggalkan beberapa tanggapan kesalahan ke IIS itu sendiri.
PS Ada bug di IIS 10 yang membuatnya terkadang menampilkan header server bahkan dengan konfigurasi yang benar. Ini harus diperbaiki sekarang, tetapi IIS / Windows harus diperbarui.
sumber
Selain jawaban Penulisan Ulang URL , berikut adalah XML lengkap untuk
web.config
Penulisan Ulang URL
sumber
Untuk menghapus
Server:
tajuk, bukaGlobal.asax
, temukan / buatApplication_PreSendRequestHeaders
acara dan tambahkan baris sebagai berikut (terima kasih kepada BK dan blog ini juga tidak akan gagal di Cassini / pengembang lokal):Jika Anda menginginkan solusi lengkap untuk menghapus semua tajuk terkait di Azure / IIS7 dan juga berfungsi dengan Cassini, lihat tautan ini , yang menunjukkan cara terbaik untuk menonaktifkan tajuk ini tanpa menggunakan HttpModules atau URLScan.
sumber
Jika Anda hanya ingin menghapus header, Anda dapat menggunakan versi singkat dari jawaban lukiffer:
Lalu di
Web.config
:sumber
Coba tetapkan
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader
entri registri keREG_DWORD
dari1
.sumber
OnPreSendRequestHeaders
event handler saya (lihat di atas) tidak pernah aktif, karena alasan tertentu.UrlScan juga dapat menghapus header server dengan menggunakan
AlternateServerName=
under[options]
.sumber
Menindaklanjuti jawaban eddiegroves , tergantung pada versi URLScan, Anda mungkin lebih memilih di
RemoveServerHeader=1
bawah[options]
.Saya tidak yakin di versi mana dari URLScan opsi ini ditambahkan, tetapi telah tersedia di versi 2.5 dan yang lebih baru.
sumber
Saya menemukan artikel yang menjelaskan mengapa kita perlu melakukan edit Registry dan menggunakan alat seperti UrlScan untuk mengaturnya di IIS dengan benar. Saya mengikutinya di server kami dan berhasil: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx . Jika Anda hanya menggunakan UrlScan tetapi tidak melakukan perubahan registri, selama Anda menghentikan World Wide Publishing Service, server Anda akan mengembalikan respons http server dari file HTTP.sys. Selain itu, berikut adalah kesalahan umum dalam menggunakan alat UrlScan: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008
sumber
Di IIS 10, kami menggunakan solusi yang mirip dengan pendekatan Drew, yaitu:
Dan tentu saja tambahkan referensi ke dll itu di proyek Anda dan juga modul di konfigurasi yang Anda inginkan:
CATATAN PENTING 1: Solusi ini memerlukan kumpulan aplikasi yang ditetapkan sebagai terintegrasi;
CATATAN PENTING2: Semua tanggapan dalam aplikasi web akan terpengaruh oleh ini (termasuk css dan js);
sumber
Saya telah meneliti ini dan metode URLRewrite berfungsi dengan baik. Tidak dapat menemukan perubahan yang dituliskan di mana pun dengan baik. Saya menulis ini kompatibel dengan PowerShell v2 dan yang lebih baru dan mengujinya di IIS 7.5.
sumber
Anda dapat menambahkan kode di bawah ini di file Global.asax.cs
sumber
Solusi yang diusulkan di atas dalam kombinasi bekerja untuk saya dengan perubahan berikut. Di sini saya memposting skenario dan solusi saya.
Bagi saya, saya ingin menghapus header berikut:
Saya menambahkan ini ke global.asax saya:
Acara di atas tidak dipicu, jadi untuk itu saya menambahkan berikut ke web.config agar berfungsi.
dan untuk menghapus versi header saya juga menambahkan berikut ini ke web.config:
Perubahan di web.config:
Semoga membantu!
sumber
Saya mencoba semua hal di sini dan di beberapa utas tumpukan overflow serupa lainnya.
Saya terputus sebentar karena saya lupa menghapus cache browser saya setelah melakukan perubahan konfigurasi. Jika Anda tidak melakukannya dan file tersebut ada di cache lokal Anda, ini akan menyajikannya kembali kepada Anda dengan header asli (duh).
Saya mendapatkannya sebagian besar bekerja dengan menghapus runAllManagedModulesForAllRequests:
Tindakan ini menghapus header asing dari sebagian besar file statis, tetapi saya masih mendapatkan header "Server" pada beberapa file statis di proyek WebAPI saya secara berlebihan.
Saya akhirnya menemukan dan menerapkan solusi ini dan sekarang semua header yang tidak diinginkan hilang:
https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85
yang membahas kodenya yang ada di sini:
https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5
Ini adalah modul Native-Code. Itu dapat menghapus header Server, tidak hanya mengosongkan nilainya. Secara default menghapus:
sumber
IIS 7.5 dan kemungkinan versi yang lebih baru memiliki teks header yang disimpan
iiscore.dll
Dengan menggunakan hex editor, temukan string dan kata "Server"
53 65 72 76 65 72
setelahnya dan ganti dengan byte nol. Di IIS 7.5 terlihat seperti ini:Tidak seperti beberapa metode lain, hal ini tidak mengakibatkan penalti kinerja. Header juga dihapus dari semua permintaan, bahkan kesalahan internal.
sumber