程序以不明確的方式訪問變量,這會導致它易受攻擊。
HttpRequest 類以數組訪問形式(如 Request["myParam"])從 QueryString、Form、Cookies 或 ServerVariables 集合提供對變量的程序訪問。當多個變量具有相同的名稱時,.NET 框架將返回按以下順序搜索集合時首先顯示的變量的值:QueryString、Form、Cookies,然后是 ServerVariables。因為 QueryString 首先出現在搜索順序中,所以 QueryString 參數可以取代來自表單、cookie 和服務器變量的值。同樣,表單值可以取代 Cookies 和 ServerVariables 集合中的變量,來自 Cookies 集合的變量可以取代來自 ServerVariables 的變量。
例 1:以下代碼將檢查 HTTP Referer 頭文件服務器變量,在對內容提供服務之前確定請求是否來自 www.example.com。
...
if (Request["HTTP_REFERER"].StartsWith("http://www.example.com"))
ServeContent();
else
Response.Redirect("http://www.example.com/");
...
http://www.example.com/ProtectedImages.aspx 時執行上述代碼。如果攻擊者直接請求該 URL,那么不會設置相應的 referer 頭文件,并且請求將失敗。然而,如果攻擊者提交包含所需值的假冒 HTTP_REFERER 參數,如 http://www.example.com/ProtectedImages.aspx?HTTP_REFERER=http%3a%2f%2fwww.example.com,那么查找將從 QueryString 而不是 ServerVariables 返回值,而且檢查將成功。
[1] Microsoft IIS Server Variables