復(fù)制代碼 代碼如下:
 
using System; 
using System.Configuration; 
using System.Web; 
using System.Globalization; 
namespace JNYW.StuM.SqlInject 
{ 
public class SqlstrAny : IHttpModule 
{ 
public void Init(HttpApplication application) 
{ 
application.BeginRequest += (new 
EventHandler(this.Application_BeginRequest)); 
} 
private void Application_BeginRequest(Object source, EventArgs e) 
{ 
ProcessRequest pr = new ProcessRequest(); 
pr.StartProcessRequest(); 
} 
public void Dispose() 
{ 
} 
} 
public class ProcessRequest 
{ 
private static string SqlStr = System.Configuration.ConfigurationManager.AppSettings["SqlInject"].ToString(); 
private static string sqlErrorPage = System.Configuration.ConfigurationSettings.AppSettings["SQLInjectErrPage"].ToString(); 
/// 
/// 用來識(shí)別是否是流的方式傳輸 
/// 
/// 
/// 
bool IsUploadRequest(HttpRequest request) 
{ 
return StringStartsWithAnotherIgnoreCase(request.ContentType, "multipart/form-data"); 
} 
/// 
/// 比較內(nèi)容類型 
/// 
/// 
/// 
/// 
private static bool StringStartsWithAnotherIgnoreCase(string s1, string s2) 
{ 
return (string.Compare(s1, 0, s2, 0, s2.Length, true, CultureInfo.InvariantCulture) == 0); 
} 
//SQL注入式攻擊代碼分析 
#region SQL注入式攻擊代碼分析 
/// 
/// 處理用戶提交的請(qǐng)求 
/// 
public void StartProcessRequest() 
{ 
HttpRequest Request = System.Web.HttpContext.Current.Request; 
HttpResponse Response = System.Web.HttpContext.Current.Response; 
try 
{ 
string getkeys = ""; 
if (IsUploadRequest(Request)) return; //如果是流傳遞就退出 
//字符串參數(shù) 
if (Request.QueryString != null) 
{ 
for (int i = 0; i < Request.QueryString.Count; i++) 
{ 
getkeys = Request.QueryString.Keys[i]; 
if (!ProcessSqlStr(Request.QueryString[getkeys])) 
{ 
Response.Redirect(sqlErrorPage + "?errmsg=QueryString中含有非法字符串&sqlprocess=true"); 
Response.End(); 
} 
} 
} 
//form參數(shù) 
if (Request.Form != null) 
{ 
for (int i = 0; i < Request.Form.Count; i++) 
{ 
getkeys = Request.Form.Keys[i]; 
if (!ProcessSqlStr(Request.Form[getkeys])) 
{ 
Response.Redirect(sqlErrorPage + "?errmsg=Form中含有非法字符串&sqlprocess=true"); 
Response.End(); 
} 
} 
} 
//cookie參數(shù) 
if (Request.Cookies != null) 
{ 
for (int i = 0; i < Request.Cookies.Count; i++) 
{ 
getkeys = Request.Cookies.Keys[i]; 
if (!ProcessSqlStr(Request.Cookies[getkeys].Value)) 
{ 
Response.Redirect(sqlErrorPage + "?errmsg=Cookie中含有非法字符串&sqlprocess=true"); 
Response.End(); 
} 
} 
} 
} 
catch 
{ 
// 錯(cuò)誤處理: 處理用戶提交信息! 
Response.Clear(); 
Response.Write("CustomErrorPage配置錯(cuò)誤"); 
Response.End(); 
} 
} 
/// 
/// 分析用戶請(qǐng)求是否正常 
/// 
/// 傳入用戶提交數(shù)據(jù) 
/// 返回是否含有SQL注入式攻擊代碼 
private bool ProcessSqlStr(string Str) 
{ 
bool ReturnValue = true; 
try 
{ 
if (Str != "") 
{ 
string[] anySqlStr = SqlStr.Split('|'); 
foreach (string ss in anySqlStr) 
{ 
if (Str.IndexOf(ss) >= 0) 
{ 
ReturnValue = false; 
break; 
} 
} 
} 
} 
catch 
{ 
ReturnValue = false; 
} 
return ReturnValue; 
} 
#endregion 
} 
} 
復(fù)制代碼 代碼如下:
 
<!--防注入設(shè)置--> 
<add value="and |exec |insert |select |delete |update |count | * |chr |mid |master |truncate |char |declare " key="SQLInject" /> 
<add value="ShowErr.aspx" key="SQLInjectErrPage" /> 
復(fù)制代碼 代碼如下:
 
<!--防注入設(shè)置--> 
<HTTPMODULES> 
<aDD type="JNYW.StuM.SqlInject.SqlstrAny,SqlstrAny" /> 
</HTTPMODULES> 
新聞熱點(diǎn)
疑難解答
圖片精選