# 隱藏IIS和ASP.NET 版本資訊 與 加上 security headers 標頭 ###### tags: `資安` 不知道大家是不是都因為弱點掃描軟體之類的列為風險,所以需要移除一些Header資訊,這邊整理了各種隱藏的方式,實測皆可正常運作。 以下教學可以隱藏http respone的這些資訊 * Server * X-Powered-By * X-AspNet-Version * X-AspNetMvc-Version * ASP.NET_SessionId ### 隱藏 Server X-AspNet-Version X-AspNetMvc-Version global.asax.cs加入以下片段 ``` protected void Application_PreSendRequestHeaders() { Response.Headers.Remove("Server"); Response.Headers.Remove("X-AspNet-Version"); Response.Headers.Remove("X-AspNetMvc-Version"); } ``` ### 隱藏 X-Powered-By web.config加入以下片段 ``` <?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <!-- 移除 Response Header 資訊 --> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer> </configuration> ``` ### 修改 ASP.NET_SessionId 名稱 另外在預設的情況下,SessionId是寫在ASP.NET_SessionId的Cookie Key下,如此一來等於是告訴大家系統就是用ASP.NET寫的。只要修web.config檔,就可以更改cookieName了 ``` <configuration> <system.web> <sessionState cookieName="UUEISessionID" /> </system.web> </configuration> ``` 補充:暗黑執行序網站提到的 安裝iis模組(有封裝成msi) 也是一種做法,但某些環境若不允許安裝的話,或許這篇可以幫得上忙 ## 線上檢Security 測Header https://securityheaders.com/ ## 檢測範例 ![](https://i.imgur.com/fJdhCXA.png) ## 新的HTTP安全頭字段:Feature Policy ### 簡中翻譯 https://zhuanlan.zhihu.com/p/43092938 ### 英文原文 https://scotthelme.co.uk/a-new-security-header-referrer-policy/ ## 修改header 增加 Content Security Policy 在Global.asax.cs增加這一段 ``` protected void Application_PreSendRequestHeaders() { Response.Headers.Remove("Server"); Response.Headers.Remove("X-AspNet-Version"); Response.Headers.Remove("X-AspNetMvc-Version"); Response.Headers.Add("Strict-Transport-Security", "max-age=31536000;includeSubDomains"); Response.Headers.Add("Content-Security-Policy", "default-src 'self'"); Response.Headers.Add("X-Content-Type-Options", "nosniff"); Response.Headers.Add("Referrer-Policy", "no-referrer"); Response.Headers.Add("Feature-Policy", "vibrate 'self'; usermedia *; sync-xhr 'self'"); } ``` ### Unrecognized feature: 'vibrate' 如果電腦開瀏覽器發現錯誤訊息有 ``` Error with Feature-Policy header: Unrecognized feature: 'vibrate'. ``` 這是因為電腦的瀏覽器不支援震動器(手機就有了),可以忽略此錯誤 ### CSP(Content Security Policy) 如果瀏覽器錯誤訊息有'evaluate a string as JavaScript' 這是因為eval()函數CSP所禁止,類似的還有 setTimeout(String),setInterval(String)和new Function(String) 官方文件提供了一種解法,叫做放寬默認策略(關於放寬默認策略更多的介紹,可以訪問Content Security Policy Reference來獲取),通過添加'unsafe-eval'來實現 ``` "content-security-policy", "script-src 'self' 'unsafe-eval'; ``` 但這樣形同content_security_policy變為虛設 ## 參考文件 * 內容安全政策 (有簡體中文版) https://developers.google.com/web/fundamentals/security/csp/ * 增加安全性的 HTTP Headers https://yu-jack.github.io/2017/10/20/secure-header/ * HTTP Header 標籤 https://devco.re/blog/tag/HTTP%20Header/ * 【筆記】Global.asax的Application_Error無效,因安全性移除Header http://a-minmin.blogspot.com/2016/07/globalasaxapplicationerrorheader.html * ASP.NET MVC - 移除特定的 Response Headers 內容 http://kevintsengtw.blogspot.com/2014/02/aspnet-mvc-response-headers.html * 徹底移除 IIS Response Header 版本資訊 https://blog.darkthread.net/blog/remove-iis-response-server-header/ * ASP.NET Core 教學 - 移除 Response Header 資訊 https://blog.johnwu.cc/article/asp-net-core-response-header.html#%E7%A7%BB%E9%99%A4-X-Powered-By-%E8%B3%87%E8%A8%8A * ASP.NET上的Cookie問題 http://sholfen.pixnet.net/blog/post/42972721 * Chrome Extension中的CSP(Content Security Policy)開發小記 https://div.io/topic/1669 * Content Security Policy (CSP) 筆記 https://hackmd.io/@Eotones/BkOX6u5kX