zoukankan      html  css  js  c++  java
  • SqlServer_Sql防止注入

    注入式攻击的详细解释SQL下面我们将以一个简单的用户登陆为例,结合代码详细解释一下SQL注入式攻击,与及他的防范措施。对于一个简单的用户登陆可能的代码如下:
    try
    {
     string strUserName = this.txtUserName.Text;
     string strPwd = this.txtPwd.Text;
     string strSql = "select * from userinfo where UserName='" + strUserName + "' and Password='" + 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 userinfo where UserName=’johny’--‘ and Password=’密码’”,只要数据库中存在johny这个用户的话,那么不管密码是什么,语句都能够执行成功,并且能够顺利通过登陆。还 有更加厉害的,我们知道SQLServer里面有一些系统的存储过程,能够执行操作系统的很多命令,比如xp_cmdshell,假如上面用户登陆的时 候,用户名部分输入的是“johny’ exec xp_cmdshell ‘format d:/s’--”,大家想想一下后果是什么?有恶意的用户,只要把’format d:/s’这个命令稍加改造就能够做很多不合法的事情。

     

    .NET防SQL注入方法


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

     
    stringstrSQL="SELECT * FROM [user] WHERE user_id=@id";
    SqlCommand cmd =newSqlCommand();
    cmd.CommandText = strSQL;
    cmd.Parameters.Add("@id",SqlDbType.VarChar,20).Value=Request["id"].ToString();

      

    2,过滤禁止运行法:

     
    /// <summary>
    /// 过滤SQL语句,防止注入
    /// </summary>
    /// <param name="strSql"></param>
    /// <returns>0 - 没有注入, 1 - 有注入 </returns>
    publicintfilterSql(stringsSql)
    {
        intsrcLen, 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)return0;elsereturn1;        
    }

    3,存储过程


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

     
    <script language="javascript">
    <!--
    varurl = location.search;
    varre=/^?(.*)(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>
  • 相关阅读:
    数据库原理与应用-------------触发器和视图
    Python操作SQLServer示例
    基于python的图片修复程序-可用于水印去除
    Android APK反编译就这么简单 详解
    android官网文档学习笔记
    android散点技术
    读书笔记一
    eclipse的各种错误和解决方法
    css
    响应式设计
  • 原文地址:https://www.cnblogs.com/ingstyle/p/5711396.html
Copyright © 2011-2022 走看看