各种sql防注入

 

防止sql注入代码

好处:为了使用出更好的体验,使用户在体验时,不会报错,看到不舒服的页面

注入式攻击的详细解释SQL下面我们将以一个简单的用户登陆为例,结合代码详细解释一下SQL注入式攻击,与及他的防范措施。对于一个简单的用户登陆可能的代码如下:
try
{
 string strUserName =this.txtUserName.Text;
 string strPwd =this.txtPwd.Text;
 string strSql ="select * from userinfo where UserName='" + strUserName + "' andPassword='" + strPwd + "'";
 SqlConnection objDbConn =new SqlConnection("数据库连接字符串");
 SqlDataAdapter objAdapter =new SqlDataAdapter(strSql,objDbConn);
 DataSet objDataSet = null;
 objAdapter.Fill(objDataSet);//TODO对获取的数据进行判断。
}
catch (System.Exception e)
{
 this.lblMsg.Text =e.Message;
 this.lblMsg.Visible = true;
}
  在上面这段代码中,如果用户的输入是正常的用户名和密码的话,那么执行都会比较正常,但是,假如输入用户名的时候,输入的是“johny’--”的话,在 SQLServer里面执行的语句将会是“select * from userinfowhere UserName=’johny’--‘ and Password=’密码’”,只要数据库中存在johny这个用户的话,那么不管密码是什么,语句都能够执行成功,并且能够顺利通过登陆。还 有更加厉害的,我们知道SQLServer里面有一些系统的存储过程,能够执行操作系统的很多命令,比如xp_cmdshell,假如上面用户登陆的时 候,用户名部分输入的是“johny’ exec xp_cmdshell ‘format d:/s’--”,大家想想一下后果是什么?有恶意的用户,只要把’format d:/s’这个命令稍加改造就能够做很多不合法的事情。

1,利用SqlCommand传参数的方法:

public List<UsRe> showUsers(stringU_name)

       {

           conn.Open();

           String str="SELECTU_id,U_name,U_pwd,U_icon,U_Email,U_Tel,U_Integral,U_State,Roles.R_id,Roles.R_nameFROM Users LEFT JOIN Roles ON Users.R_id=Roles.R_id WHERE U_State=0 AND U_namelike @U_name  AND Roles.R_id=1";

           SqlCommand cmd = new SqlCommand(str, conn);

           cmd.Parameters.AddWithValue("@U_name",  U_name + "%");

            SqlDataReader sdr =cmd.ExecuteReader();

           List<UsRe> Users = new List<UsRe>();

           while (sdr.Read())

           {

                UsRe use = new UsRe();

                use.Users.U_id =Convert.ToInt32(sdr["U_id"]);

               use.Users.U_name =Convert.ToString(sdr["U_name"]);

                use.Users.U_pwd =Convert.ToString(sdr["U_pwd"]);

                use.Users.U_icon =Convert.ToString(sdr["U_icon"]);

                use.Users.U_Email =Convert.ToString(sdr["U_Email"]);

                use.Users.U_Tel =Convert.ToString(sdr["U_Tel"]);

                use.Users.U_Integral =Convert.ToInt32(sdr["U_Integral"]);

                use.Users.U_State =Convert.ToInt32(sdr["U_State"]);

                use.Roles.R_id =Convert.ToInt32(sdr["R_id"]);

                use.Roles.R_name =Convert.ToString(sdr["R_name"]);

                Users.Add(use);

           }

           conn.Close();

           return Users;

       }

2,过滤禁止运行法:

/// <summary>

/// 过滤SQL语句,防止注入

/// </summary>

/// <paramname="strSql"></param>

/// <returns>0 - 没有注入, 1 - 有注入</returns>

public int filterSql(string sSql)

{

    int srcLen,decLen = 0;

    sSql =sSql.ToLower().Trim();

    srcLen =sSql.Length;

    sSql =sSql.Replace("exec", "");

    sSql =sSql.Replace("delete", "");

    sSql =sSql.Replace("master", "");

    sSql =sSql.Replace("truncate", "");

    sSql =sSql.Replace("declare", "");

    sSql =sSql.Replace("create", "");

    sSql =sSql.Replace("xp_", "no");

    decLen =sSql.Length;

    if (srcLen ==decLen) return 0;else return 1;        

}

3,存储过程


js版的防范SQL注入式攻击代码:

<!--

var url = location.search;

var re=/^\?(.*)(select%20|insert%20|delete%20from%20|count\(|drop%20table|update%20truncate%20|asc\(|mid\(|char\(|xp_cmdshell|exec%20master|net%20localgroup%20administrators|\"|:|net%20user|\|%20or%20)(.*)$/gi;

var e = re.test(url);

if(e) {

    alert("地址中含有非法字符~");

    location.href="error.asp";

}

//-->

<script>

防脚本,意外字符

[ValidateInput(false)]

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值