Sql注入.
简介.
我们很容易从网上查找到sql注入的定义: 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,很容易遭到SQL注入式攻击.
用户可以提交一段数据库的查代码,根据程序返回结果,获得一些敏感的信息或是控制整个服务器.sql注入就发生了.
当然我们要魔高一尺,道高一丈.
防止sql注入:
永远不要信任用户的输入,对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双 - - (在数据库中认为是数据库语句的连接)进行转换等.
永远不要动态拼接sql,可以使用参数化的sql或者直接使用存储过程来进行数据查询存取.
永远不要使用管理员权限的数据库的连接,为每个应用使用单独的权限书库连接.
不要把机密的信息直接存放,加密.
应用的异常信息应该处仅少量的提示,最好使用自定义的错误信息对原始的错误进行封装.
采用软件和有效的网站平台来检测sql注入.
实例.(用参数化的sql进行插入来防止Sql注入)
向数据库的新闻类别表(category)通过字符串拼接的方法插入一条语句。
插入函数的代码.
- <span style="font-size:16px;">public bool Insert(string caName)
- {
-
- bool flag = false;
- string sql = "insert into category(name) values('" + caName + "')";
- flag = sqlhelper.ExecuteNonQuery(sql);
-
- return flag;
- }</span>
我们的界面:
我们在调试中可以看到传入数据库中的sql语句。
Ctrl+F5我们不调试直接执行,或是我们把此sql语句复制在查询分析器中执行。界面中我们可以看到。
在增加一行的基础同时我们id为3的记录消失了,被删除了。
让我们对插入数据库的插入代码修改,用参数传递来代替数据库字符串的拼接。
在SQLHelper加上个ExecuteQuery(string sql ,sqlParam[] paras)的重载.
- <span style="font-size: 14pt; "> </span><span style="font-size:16px;">
-
-
-
-
-
- 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;
- }</span><span style="font-size: 14pt;">
- </span>
- <span style="font-size:16px;">
-
-
-
-
- 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;
- }</span><span style="font-size: 14pt;">
- </span>
这次我们再进行插入,结果如下.
posted on 2012-07-09 23:13
zhanghu198901 阅读(778)
评论(0) 编辑 收藏