SQL注入、XSS的跨站入侵,已是老的話題,但很多時候前端開發人員一不留神則會忽略了此類安全的過濾。以下通過簡單的代碼示例展示這兩種入侵的全局屏蔽,當然如果你需求對URL中特殊頁面傳輸敏感字符,則可增加頁面配置規則,放行即可。
考慮到非法請求有兩種:GET方式:Encode之前、Encode之後的URL串,POST方式:表單提交;所有欲全局控制,則可在APP請求生命週期的最前端完成攔截(.NET:httpmodule、httphandler)。對GET請求,Encode前後分別做校驗,對form方式數據,則需要全局遍歷Form數據,本示例僅給出GET方式的Request請求處理。
示例:
string regexsString = @"\'|;|#|--|<|>|\*|\+|\(|\)|chr(34)|chr(0)|([\s\b+()]+(select|update|insert|delete|declare|@|exec|dbcc|alter|drop|create|backup|if|else|end|and|or|add|set|open|close|use|begin|retun|as|go|exists)[\s\b+]*)";
string url = HttpContext.Current.Request.RawUrl.ToString();
bool IsValid = true;
Regex regex = new Regex(regexsString, RegexOptions.IgnoreCase);
string decodeUrl = HttpUtility.UrlDecode(url);
if (regex.IsMatch(url) || regex.IsMatch(decodeUrl))
{
IsValid = false;
}
if (!IsValid)
{
LogHelper.Security("Security:", "非法的SQL注入" + " Ip:" + GlobalItem.GetRequestIP + ", Url:" + url);
HttpContext.Current.Response.Redirect("ErrorPage.aspx?code=" + ErrorDefine.INVALID_SQL_INJECT);
}
regexsString 用以配置過濾敏感字符的規則。