IIS請求篩選模塊被配置為拒絕包含雙重轉義序列的請求404.11


文件目錄有這樣一個包含了加號的文件:2015年日歷表(A4+版).pdf

現在要求下載此文件,考慮這樣一個url /UploadFile/2015年日歷表(A4+版).pdf

如果在瀏覽器訪問這個url,有時候會出現404.11的錯誤

HTTP Error 404.11 - Not Found

請求篩選模塊被配置為拒絕包含雙重轉義序列的請求

這是什么原因呢?

在window下,加號(+)是合法的文件名,但是在url里代表了不同的意思

參考 http://stackoverflow.com/questions/1005676/urls-and-plus-signs

若是作為queryString的一部分,那么+號代表空格

訪問 https://www.baidu.com/?dd=ha+ha 和 https://www.baidu.com/?dd=ha%20ha效果是一樣的,解碼后,都代表了空格

 

 

 

 

但是+號作為Url component(注意不是作為queryString)時,就是+號本身,不會轉義

例如 http://www.cnblogs.com/imust+2008/p/6829927.html

 

 

URL-Normalization: Full (url規范化對空格的編碼)

 

 

1,什么是雙重轉義序列

雙重轉義字符 (例如,"abc\\d") 對於url,+先轉義為space(空格),空格再轉義為%20

三個轉義字符 (例如,abc\\\d)

 

2,IIS的Request Filtering機制

IIS7以及以上版本,集成了一個URLScan工具,用於掃描url,檢測不安全的字符,此工具的Request Filtering模塊用於過濾不安全的請求。

https://docs.microsoft.com/en-us/iis/manage/configuring-security/use-request-filtering

其中的double-encoded requests filter(雙重轉義過濾器),用於過濾雙重轉義序列。

當url出現雙重轉義序列時,IIS將對url進行兩次url規范化(url normalization),當第一次規范化后的字符串與第二次規范化的字符串不一致時,IIS認為這是危險的url,IIS將拒絕這一請求,並返回404.11錯誤。

 

3,

關閉 double-encoded requests filter

<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
</system.webServer>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM