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>
  • 相关阅读:
    1.4.2.3. SETUP(Core Data 应用程序实践指南)
    1.4.2.2. PATHS(Core Data 应用程序实践指南)
    1.4.2.1. FILES(Core Data 应用程序实践指南)
    1.4.2. 实现 Core Data Helper 类(Core Data 应用程序实践指南)
    1.4.1. Core Data Helper 简介(Core Data 应用程序实践指南)
    1.4. 为现有的应用程序添加 Core Data 支持(Core Data 应用程序实践指南)
    1.3.2. App Icon 和 Launch Image(Core Data 应用程序实践指南)
    1.3.1. 新建Xcode项目并设置故事板(Core Data 应用程序实践指南)
    php验证邮箱是否合法
    如何使js函数异步执行
  • 原文地址:https://www.cnblogs.com/ingstyle/p/5711396.html
Copyright © 2011-2022 走看看