简单防sql注入

一、防止文本框注入
js代码:

<script>
//防止SQL注入
function AntiSqlValid(oField) {
re = /select|update|delete|exec|count|'|"|=|;|>|<|%/i;
if (re.test(oField.value)) {
alert("请您不要在参数中输入特殊字符和SQL关键字!"); //注意中文乱码
var val = oField.value;
oField.value = val.substring(0, val.length - 1);
oField.className = "errInfo";
oField.focus();
return false;
}
}
</script>

html代码:

<li>只能输入数字和字母:<input type="text" onkeyup="return AntiSqlValid(this)" /></li>

二、防止url注入

在Global文件里里加入 
   

protected void Application_BeginRequest(Object sender, EventArgs e) 
   { 
   //SQL防注入 
   string Sql_1 = "exec|insert+|select+|delete+|update+|count|chr|mid|master+|truncate|char|declare|drop+|drop+table|creat+|creat+table";
   string Sql_2 = "exec+|insert|insert+|delete+|update+|count(|count+|chr+|+mid(|+mid+|+master+|truncate+|char+|+char(|declare+|drop+|creat+|drop+table|creat+table";
   string[] sql_c = Sql_1.Split('|'); 
   string[] sql_c1 = Sql_2.Split('|');

   if (Request.QueryString != null) 
   { 
   foreach (string sl in sql_c) 
   { 
   if (Request.QueryString.ToString().ToLower().IndexOf(sl.Trim()) >= 0) 
   { 
   Response.Write("警告!你的IP已经被记录!不要使用敏感字符!");// 
   Response.Write(sl); 
   Response.Write(Request.QueryString.ToString()); 
   Response.End(); 
   break; 
   } 
   } 
   }

   if (Request.Form.Count > 0) 
   { 
   string s1 = Request.ServerVariables["SERVER_NAME"].Trim();//服务器名称 
   if (Request.ServerVariables["HTTP_REFERER"] != null) 
   { 
   string s2 = Request.ServerVariables["HTTP_REFERER"].Trim();//http接收的名称 
   string s3 = ""; 
   if (s1.Length > (s2.Length - 7)) 
   { 
   s3 = s2.Substring(7); 
   } 
   else 
   { 
   s3 = s2.Substring(7, s1.Length); 
   } 
   if (s3 != s1) 
   { 
   Response.Write("警告!你的IP已经被记录!不要使用敏感字符!");// 
   Response.End(); 
   } 
   } 
   } 
   }


  三、对参数进行SQL防止注入判断
   

public static string SafeSqlLiteral(string inputSQL)
   {
    // check incoming parameters for null or blank string
    if ((inputString != null) && (inputString != String.Empty))
    {
    inputString = inputString.Trim();

                  inputString = Regex.Replace(inputString, "[//s]{2,}", " "); //two or more spaces
                  inputString = Regex.Replace(inputString, "(<[b|B][r|R]/*>)+|(<[p|P](.|//n)*?>)", "/n"); //<br>
                  inputString = Regex.Replace(inputString, "(//s*&[n|N][b|B][s|S][p|P];//s*)+", " "); //&nbsp;
                  inputString = Regex.Replace(inputString, "<(.|//n)*?>", string.Empty); //any other tags
                  inputString = inputString.Replace("'", "''");

                  return inputString;
   }
   else
    return inputString;
   }


  c.彻底杜绝SQL注入

   1.不要使用sa用户连接数据库 
   2、新建一个public权限数据库用户,并用这个用户访问数据库 
   3、[角色]去掉角色public对sysobjects与syscolumns对象的select访问权限 
   4、[用户]用户名称-> 右键-属性-权限-在sysobjects与syscolumns上面打“×” 
   5、通过以下代码检测(失败表示权限正确,如能显示出来则表明权限太高): 
   DECLARE @T varchar(255), 
   @C varchar(255) 
   DECLARE Table_Cursor CURSOR FOR 
   Select a.name,b.name from sysobjects a,syscolumns b 
   where a.id=b.id and a.xtype= 'u ' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) 
   OPEN Table_Cursor 
   FETCH NEXT FROM Table_Cursor INTO @T,@C 
   WHILE(@@FETCH_STATUS=0) 
   BEGIN print @c 
   FETCH NEXT FROM Table_Cursor INTO @T,@C 
   END 
   CLOSE Table_Cursor 
   DEALLOCATE Table_Cursor

   sql2005做法:
   1、在系统视图找到sysobjects a,syscolumns b ,属性,进入权限,找到SELECT后面拒绝打勾即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值