浅入浅出SQL注入

Sql注入.


简介.


我们很容易从网上查找到sql注入的定义: 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,很容易遭到SQL注入式攻击.

用户可以提交一段数据库的查代码,根据程序返回结果,获得一些敏感的信息或是控制整个服务器.sql注入就发生了.

当然我们要魔高一尺,道高一丈.


防止sql注入:


  永远不要信任用户的输入,对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双 - - (在数据库中认为是数据库语句的连接)进行转换等.

  永远不要动态拼接sql,可以使用参数化的sql或者直接使用存储过程来进行数据查询存取.

   永远不要使用管理员权限的数据库的连接,为每个应用使用单独的权限书库连接.

  不要把机密的信息直接存放,加密.

  应用的异常信息应该处仅少量的提示,最好使用自定义的错误信息对原始的错误进行封装.

  采用软件和有效的网站平台来检测sql注入.

 


实例.(用参数化的sql进行插入来防止Sql注入)

向数据库的新闻类别表(category)通过字符串拼接的方法插入一条语句。


插入函数的代码.

public bool Insert(string caName)
        {
            //标记位,并且赋初值.
            bool flag = false;
            string sql = "insert into category(name) values('" + caName + "')";
            flag = sqlhelper.ExecuteNonQuery(sql);
 
            return flag;
        }


我们的界面:



我们在调试中可以看到传入数据库中的sql语句。


Ctrl+F5我们不调试直接执行,或是我们把此sql语句复制在查询分析器中执行。界面中我们可以看到。

在增加一行的基础同时我们id3的记录消失了,被删除了。


让我们对插入数据库的插入代码修改,用参数传递来代替数据库字符串的拼接。

SQLHelper加上个ExecuteQuery(string sql ,sqlParam[] paras)的重载.

        /// <summary>
        ///该方法是通过参数传递来执行相应的sql语句.
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public bool ExecuteNonquery(string sql, SqlParameter[] paras)
        {
            bool flag=false ;
            using (cmd = new SqlCommand(sql, GetConn()))
            {
                //添加参数.
                cmd.Parameters .Add (paras );
                if (cmd.ExecuteNonQuery()>0)
	               {
		               flag =true;
	               }
            }
 
            return flag;
        }

/// <summary>
        /// 增加新闻类别功能方法.
        /// </summary>
        /// <param name="caName">新闻类别字符串测试一下</param>
        /// <returns></returns>
        public bool Insert(string caName)
        {
            //标记位,并且赋初值.
            bool flag = false;
            string sql = "insert into category(name) values(@caName)";
            SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@caName", caName) };
            flag = sqlhelper.ExecuteNonQuery(sql);
 
            return flag;
        }
这次我们再进行插入,结果如下.







评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值