2023拉
有效防止SQL注入的方法学习之二
上一篇 /
下一篇 2012-03-07 11:56:38
/ 个人分类:安全检测
usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;///<summary>///SqlCheck 的摘要说明///</summary>publicclassSqlCheck
{publicvoidCheckSql()
{stringjk1986_sql="exec↓select↓drop↓alter↓exists↓union↓and↓or↓xor↓order↓mid↓asc↓execute↓xp_cmdshell↓insert↓update↓delete↓join↓declare↓char↓sp_oacreate↓wscript.shell↓xp_regwrite↓'↓;↓--";string[] jk_sql=jk1986_sql.Split('↓');foreach(stringjkinjk_sql)
{//-----------------------防 Post 注入-----------------------if(System.Web.HttpContext.Current.Request.Form.!=null)
{for(intk=0; k<System.Web.HttpContext.Current.Request.Form.Count; k++)
{stringgetsqlkey=System.Web.HttpContext.Current.Request.Form.Keys[k];stringgetip;if(System.Web.HttpContext.Current.Request.Form[getsqlkey].ToLower().Contains(jk)==true)
{
System.Web.HttpContext.Current.Response.Write("<script. Language=JavaScript>alert('请勿提交非法字符!');</"+"script>");
System.Web.HttpContext.Current.Response.Write("非法操作!系统做了如下记录 ↓"+"<br>");if(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!=null)
{
getip=System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}else{
getip=System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
System.Web.HttpContext.Current.Response.Write("操 作 I P :"+getip+"<br>");
System.Web.HttpContext.Current.Response.Write("操 作 时 间:"+DateTime.Now.ToString()+"<br>");
System.Web.HttpContext.Current.Response.Write("操 作 页 面:"+System.Web.HttpContext.Current.Request.ServerVariables["URL"]+"<br>");
System.Web.HttpContext.Current.Response.Write("提 交 方 式:P O S T"+"<br>");
System.Web.HttpContext.Current.Response.Write("提 交 参 数:"+jk+"<br>");
System.Web.HttpContext.Current.Response.Write("提 交 数 据:"+System.Web.HttpContext.Current.Request.Form[getsqlkey].ToLower()+"<br>");
System.Web.HttpContext.Current.Response.End();
}
}
}//-----------------------防 GET 注入-----------------------if(System.Web.HttpContext.Current.Request.QueryString!=null)
{for(intk=0; k<System.Web.HttpContext.Current.Request.QueryString.Count; k++)
{stringgetsqlkey=System.Web.HttpContext.Current.Request.QueryString.Keys[k];stringgetip;if(System.Web.HttpContext.Current.Request.QueryString[getsqlkey].ToLower().Contains(jk)==true)
{
System.Web.HttpContext.Current.Response.Write("<script. Language=JavaScript>alert('请勿提交非法字符!');</"+"script>");
System.Web.HttpContext.Current.Response.Write("非法操作!系统做了如下记录 ↓"+"<br>");if(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!=null)
{
getip=System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}else{
getip=System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
System.Web.HttpContext.Current.Response.Write("操 作 I P :"+getip+"<br>");
System.Web.HttpContext.Current.Response.Write("操 作 时 间:"+DateTime.Now.ToString()+"<br>");
System.Web.HttpContext.Current.Response.Write("操 作 页 面:"+System.Web.HttpContext.Current.Request.ServerVariables["URL"]+"<br>");
System.Web.HttpContext.Current.Response.Write("提 交 方 式:G E T"+"<br>");
System.Web.HttpContext.Current.Response.Write("提 交 参 数:"+jk+"<br>");
System.Web.HttpContext.Current.Response.Write("提 交 数 据:"+System.Web.HttpContext.Current.Request.QueryString[getsqlkey].ToLower()+"<br>");
System.Web.HttpContext.Current.Response.End();
}
}
}//-----------------------防 Cookies 注入-----------------------if(System.Web.HttpContext.Current.Request.Cookies!=null)
{for(intk=0; k<System.Web.HttpContext.Current.Request.Cookies.Count; k++)
{stringgetsqlkey=System.Web.HttpContext.Current.Request.Cookies.Keys[k];stringgetip;if(System.Web.HttpContext.Current.Request.Cookies[getsqlkey].Value.ToLower().Contains(jk)==true)
{
System.Web.HttpContext.Current.Response.Write("<script. Language=JavaScript>alert('请勿提交非法字符!');</"+"script>");
System.Web.HttpContext.Current.Response.Write("非法操作!系统做了如下记录 ↓"+"<br>");if(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!=null)
{
getip=System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}else{
getip=System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
System.Web.HttpContext.Current.Response.Write("操 作 I P :"+getip+"<br>");
System.Web.HttpContext.Current.Response.Write("操 作 时 间:"+DateTime.Now.ToString()+"<br>");
System.Web.HttpContext.Current.Response.Write("操 作 页 面:"+System.Web.HttpContext.Current.Request.ServerVariables["URL"]+"<br>");
System.Web.HttpContext.Current.Response.Write("提 交 方 式: Cookies"+"<br>");
System.Web.HttpContext.Current.Response.Write("提 交 参 数:"+jk+"<br>");
System.Web.HttpContext.Current.Response.Write("提 交 数 据:"+System.Web.HttpContext.Current.Request.Cookies[getsqlkey].Value.ToLower()+"<br>");
System.Web.HttpContext.Current.Response.End();
}
}
}
}
}
}
1、控制数据类型;int类型的值就用int类型接收;string类型就用string类型
2、控制字符串长度;
3、不符合以上两条的,以传参的方式执行sql语句;不要拼接
过滤非法字符是不明智的做法。对
数据库来说是非法的字符对于业务来说很可能是合法的。所以这个做法需要跟业务相结合,谨慎使用。
程序中一般应该是看不到sql语句的吧,都采用存储过程吧。从我上班到面在,还就是在第一个公司在程序里面用过sql语句。而且被注入过,后来全部改采用存储过程的方式。一直到现在这个公司,也是都使用存储过程,不知道其它公司是不是也是这样
收藏
举报
TAG: