C# 改善辦法
在Web.config文件下面增加一個如下標籤:
<appSettings>
< add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip" />
< /appSettings>
在Global.asax中增加下面一段:
protected void Application_BeginRequest(Object sender, EventArgs e){
String[] safeParameters = System.Configuration.ConfigurationSettings.AppSettings["safeParameters"].ToString().Split(‘,’);
for(int i= 0 ;i < safeParameters.Length; i++){
String parameterName = safeParameters[i].Split('-’)[0];
String parameterType = safeParameters[i].Split('-’)[1];
isValidParameter(parameterName, parameterType);
}
}
public void isValidParameter(string parameterName, string parameterType){
string parameterValue = Request.QueryString[parameterName];
if(parameterValue == null) return;
if(parameterType.Equals("int32“)){
if(!parameterCheck.isInt(parameterValue)) Response.Redirect("parameterError.aspx“);
}
else if (parameterType.Equals("USzip“)){
if(!parameterCheck.isUSZip(parameterValue)) Response.Redirect("parameterError.aspx“);
}
else if (parameterType.Equals("email“)){
if(!parameterCheck.isEmail(parameterValue)) Response.Redirect("parameterError.aspx“);
}
}
使用字符串過濾類
/**//// < summary>
/// 分析用戶請求是否正常
/// < /summary>
/// < param name="Str">傳入用戶提交數據< /param>
/// < returns>返回是否含有SQL注入式攻擊代碼< /returns>
private static bool ProcessSqlStr(string Str,int type)
{
string SqlStr;
SqlStr = "'|and|exec|insert|select|delete|update|count|*|chr|mid|master|truncate|char|declare";
bool ReturnValue = true;
try
{
If (Str != "")
{
Str=str.toLowerCase();//轉小寫
string[] anySqlStr = SqlStr.Split(’|’);
foreach (string ss in anySqlStr)
{
If (Str.IndexOf(ss)>=0)
{
ReturnValue = false;
}
}
}
}
catch
{
ReturnValue = false;
}
return ReturnValue;
}
參考來源: C#防SQL注入代碼的實現方法
留言列表