IIS 7+禁止URL路徑使用加號代表空白

網友回報,部落格的標籤(Tag)分類查詢,遇到標籤包含空白(例如:Kendo UI、Windows 8…)會出現HTTP 404.11錯誤:

錯誤訊息已提供明確指示,有幾個關鍵字,allowDoubleEscaping、RequestFilteringModule,推測IIS是基於某些資安考慮封鎖了路徑出現+的URL,調整allowDoubleEscaping設定即可排除。所以,把閞關打開就沒事了嗎?

不,這不是我的風格,IIS之所以會加入新限制一定有理由,移除前應審慎考慮其風險(遇到資安就變龜毛是我的傳統,例如:多想兩分鐘,你可以不必教User關掉Vista UAC 多想兩分鐘,你可以不用 validateRequest=-false),這回,或許也該「多想兩分鐘,你可以不要打開allowDoubleEscaping」。

URL參數(Query String)編碼時空白會轉成+是常識,在過去URL路徑也採納相同的規則(CGI時代的標準),但依據新的HTTP規範,URL路徑的空白應轉為%20,只有URL參數的空白才應該轉成+。

+ means a space only in application/x-www-form-urlencoded content, such as the query part of a URL: http://www.example.com/path/foo+bar/path?query+name=query+value
In this URL, the parameter name is query name with a space and the value is query value with a space, but the folder name in the path is literally foo+bar, not foo bar. 參考

而這也是為什麼JavaScript不建議再用esacpe(),改用encodeURI()或encodeURIComponent()的理由。延伸閱讀:encodeURI / encodeURIComponent的使用時機

問題來了,部落格平台程式萬年沒改過(羞愧),標籤查詢URL何以一夕出錯?我想起,由於Windows 2003平台支援中止在即,Hosting廠商最近將網站搬到Windows 2012R2上,IIS從IIS 6升級到IIS 8.5,二者對URL把關標準不同,開始出錯。

IIS Team Blog的這篇文章用一個實例解釋了什麼為IIS要禁止URL路徑使用加號:

<authorization vdir="my vdir">
    <allowed users="Administrators"/>
</authorization>

若允許URL將+轉成空白,則httq://the-web-server/my+vdir/可以存取"my vdir"路徑,卻不受權限設定規範。簡單來說,這項額外轉碼規則易形成URL樣式比對上的漏洞或增加比對複雜度,當比對與安全控管有關,就會帶來風險。

認同這樣的安全考慮,乖乖地修改程式,在產生URL路徑時,用%20取代+, 問題排除。

PS:感謝網友Alex Tam通報網站錯誤。

歡迎推文分享:
Published 02 July 2015 10:16 PM 由 Jeffrey
Filed under:
Views: 2,969



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<July 2015>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication