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:

TesterChen-Software Testing 引用 删除 TesterChen   /   2012-03-07 15:00:11
格式……
 

评分:0

我来说两句

Open Toolbar