输入验证与表示问题是由元字符、交替编码和数字表示引起的。安全问题源于信任输入。这些问题包括:“Buffer Overflows”、“Cross-Site Scripting”攻击、“SQL Injection”等其他问题。
HttpRequest
类可通过编程的方式利用数组(例如 Request["myParam"]
)访问 QueryString
、Form
、Cookies
或 ServerVariables
集合中的变量。如果多个变量使用相同的名称,.NET 框架将返回按以下顺序搜索这些集合时最先显示的变量值:QueryString
、Form
、Cookies
、ServerVariables
。由于 QueryString
会首先搜索,因此 QueryString
参数可能会取代 Form、Cookies 和 ServerVariables 变量的值。同样,Form 值可能会取代 Cookies
和 ServerVariables
集合中的变量,Cookies
集合中的变量可能会取代 ServerVariables
中的变量。
...
String toAddress = Request["email"]; //Expects cookie value
Double balance = GetBalance(userID);
SendAccountBalance(toAddress, balance);
...
http://www.example.com/GetBalance.aspx
时执行Example 1
中的代码。如果攻击者能够使经过身份验证的用户单击请求 http://www.example.com/GetBalance.aspx?email=evil%40evil.com
的链接,则会将包含该用户的帐户余额的电子邮件发送到 evil@evil.com
。HttpRequest
类可通过编程的方式利用数组(例如 Request["myParam"]
)访问 QueryString
、Form
、Cookies
或 ServerVariables
集合中的变量。如果多个变量使用相同的名称,.NET 框架将返回按以下顺序搜索这些集合时最先显示的变量值:QueryString
、Form
、Cookies
、ServerVariables
。由于 QueryString
会首先搜索,因此 QueryString
参数可能会取代 Form、Cookies 和 ServerVariables 变量的值。同样,Form 值可能会取代 Cookies
和 ServerVariables
集合中的变量,Cookies
集合中的变量可能会取代 ServerVariables
中的变量。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
时执行Example 1
中的代码。如果攻击者直接请求该 URL,则不会设置相应的 referer 标头,并且该请求将失败。然而,如果攻击者提交具有所需值的假冒 HTTP_REFERER
参数,例如 http://www.example.com/ProtectedImages.aspx?HTTP_REFERER=http%3a%2f%2fwww.example.com
,则查找将从 QueryString
而不是 ServerVariables
返回值,并且此检查将成功。