程序以不明確的方式訪問變量,這會導致它易受攻擊。
HttpRequest 類以數組訪問形式(如 Request["myParam"])從 QueryString、Form、Cookies 或 ServerVariables 集合提供對變量的程序訪問。當多個變量具有相同的名稱時,.NET 框架將返回按以下順序搜索集合時首先顯示的變量的值:QueryString、Form、Cookies,然后是 ServerVariables。因為 QueryString 首先出現在搜索順序中,所以 QueryString 參數可以取代來自表單、cookie 和服務器變量的值。同樣,表單值可以取代 Cookies 和 ServerVariables 集合中的變量,來自 Cookies 集合的變量可以取代來自 ServerVariables 的變量。
例 1:假設某個銀行應用程序將用戶的電子郵件地址臨時存儲在 cookie 中,并在需要聯系該用戶時讀取該值。以下代碼將讀取 cookie 值,并將帳戶余額發送到指定的電子郵件地址。
...
String toAddress = Request["email"]; //Expects cookie value
Double balance = GetBalance(userID);
SendAccountBalance(toAddress, balance);
...
http://www.example.com/GetBalance.aspx 時執行上述代碼。如果攻擊者能夠使認證用戶單擊請求 http://www.example.com/GetBalance.aspx?email=evil%40evil.com 的鏈接,那么包含該用戶的帳戶余額的電子郵件將被發送到 evil@evil.com。