﻿# 安裝 UrlScan 需注意原始設定會破壞所有中文檔名的連結

這應該是我第二次替客戶處理 [UrlScan](http://technet.microsoft.com/en-us/security/cc242650.aspx) 的問題了，就如同我在[之前寫的文章](/post/2009/01/22/Useful-tool-UrlScan-Security-Tool)裡提到的：「如果你為了要讓 Web 應用程式更安全，但卻不想研讀每個參數設定的話，強烈建議你乾脆就不要安裝，因為裝上去之後是有可能讓你的網站部分功能失效的」。果然如此，昨天又再次遇到客戶因為安裝了 [UrlScan](http://technet.microsoft.com/en-us/security/cc242650.aspx) 導致網站許多頁面回應 HTTP 404 找不到網頁的錯誤。

昨天遇到的狀況是在測試機怎樣測試都沒問題，但安裝到正式主機後，就開始有許多頁面出現 **HTTP 404 找不到網頁** 的問題，以及有些檔名含有中文的檔案也都無法下載，這類問題我處理過兩次：

第一次我利用 [Process Monitor](http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) 查出有 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](http://zh.wikipedia.org/wiki/UTF-8) 或任何[多位元組字元集(MBCS)](http://en.wikipedia.org/wiki/Multi-byte_character_set)的字元出現在路徑檔名中**」，所以只要檔名或路徑有出現任何中文字，即便是使用 UrlEncode 編碼過，都會被 [UrlScan](http://technet.microsoft.com/en-us/security/cc242650.aspx) 阻擋下來！

 ![在 C:\\WINDOWS\\system32\\inetsrv\\urlscan\\UrlScan.ini 設定檔的前幾行有個 AllowHighBitCharacters 參數，預設設定值是 0，意思是指「不允許任何 UTF-8 或任何多位元組字元集(MBCS)的字元出現在路徑檔名中」，所以只要檔名或路徑有出現任何中文字，即便是使用 UrlEncode 編碼過，都會被 UrlScan 阻擋下來！](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/bb13ef3895a4d1e1e64f-image_6.png)

你只要將 AllowHighBitCharacters 設定成 1 再重新啟動 IIS ( **iisreset** ) 即可修復此問題。

所以，這是在安裝 [UrlScan](http://technet.microsoft.com/en-us/security/cc242650.aspx) 之後最基本要做的第一個步驟，因為採用中文檔名還蠻常見的！

**相關連結**

-   [介紹好用工具：UrlScan Security Tool ( 入門級的 WAF 工具 )](/post/2009/01/22/Useful-tool-UrlScan-Security-Tool)
-   [UTF-8 - 维基百科，自由的百科全书](http://zh.wikipedia.org/wiki/UTF-8)
-   [Variable-width encoding - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Multi-byte_character_set) ( MCBS )
-   [Process Monitor](http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)
