這應該是我第二次替客戶處理 UrlScan 的問題了,就如同我在之前寫的文章裡提到的:「如果你為了要讓 Web 應用程式更安全,但卻不想研讀每個參數設定的話,強烈建議你乾脆就不要安裝,因為裝上去之後是有可能讓你的網站部分功能失效的」。果然如此,昨天又再次遇到客戶因為安裝了 UrlScan 導致網站許多頁面回應 HTTP 404 找不到網頁的錯誤。
昨天遇到的狀況是在測試機怎樣測試都沒問題,但安裝到正式主機後,就開始有許多頁面出現 HTTP 404 找不到網頁 的問題,以及有些檔名含有中文的檔案也都無法下載,這類問題我處理過兩次:
第一次我利用 Process Monitor 查出有 urlscan.dll 的執行紀錄,直覺的想到應該是 UrlScan 的關係導致,修改 urlscan.ini 即可。[ 解決時間: 60 分鐘 ]
第二次我先查詢 IIS Log 發現剛剛的錯誤連結有 GET /Rejected-By-UrlScan 的字樣,那就不用說了,肯定是相同的問題,修改 urlscan.ini 即可。[ 解決時間: 5 分鐘 ]
在 C:\WINDOWS\system32\inetsrv\urlscan\UrlScan.ini 設定檔的前幾行有個 AllowHighBitCharacters 參數,預設設定值是 0,意思是指「不允許任何 UTF-8 或任何多位元組字元集(MBCS)的字元出現在路徑檔名中」,所以只要檔名或路徑有出現任何中文字,即便是使用 UrlEncode 編碼過,都會被 UrlScan 阻擋下來!
你只要將 AllowHighBitCharacters 設定成 1 再重新啟動 IIS ( iisreset ) 即可修復此問題。
所以,這是在安裝 UrlScan 之後最基本要做的第一個步驟,因為採用中文檔名還蠻常見的!
相關連結