浅入浅出SQL注入
之前学习数据库的时候没有怎么了解SQL注入方面的知识,最近在做一个网站的时候,发现别人很容易就能够破坏我的数据库,于是就简单了解了一下这方面的知识。下面就来和大家分享一下我是怎样防止别人修改数据库的一个例子。废话少说,下面进入正题。
我先建立了一个添加类别表的方法。代码如下:
1 private SqlCommand cmd = null;
2 public bool insert(string name)
3 {
4 bool tag = false;
5 string sql = "insert into category(name) values(‘“+name+”’)";
6 int sm = sqlhelper.ExecuteNonQuery(sql);
7 if (sm > 0)
8 {
9 tag = true;
10 }
11 return tag;
12 }
13 public int ExecuteNonQuery(string sql)
14 {
15 int i;
16 try
17 {
18 cmd = new SqlCommand(sql, getconn());
19 i = cmd.ExecuteNonQuery();
20 }
21 catch (Exception ex)
22 {
23 throw ex;
24 }
25 finally
26 {
27 conn.Close();
28 }
29 return i;
30 }
然后在首页调用insert方法,来添加类别。但是当我在文本框中输入yong')delete category where id=11--时,在单击添加按钮时,我数据库中ID为11的记录已经被删除了,这是怎么回事了。大家可以仔细看哈我的代码,综合起来就是上面的添加语句就变成了insert into category (name) values ('yong')delete category where id=11--'),其实这是两条语句了,在添加的同时也删除了其他的记录,试想一哈,如果我在文本框中输入的是yong')delete category --时,那么我的这张类别表是不是就被删除了,这很显然是一个很大的安全隐患。下面就来讲解一哈我们是怎样防止注入的了,先给大家看哈我改后的代码:
1 private SqlCommand cmd = null;
2 public bool insert(string name)
3 {
4 bool tag = false;
5 string sql = "insert into category(name) values(@name)";
6 SqlParameter[] paras = new SqlParameter[]
7 {
8 new SqlParameter("@name", name)
9 };
10 int sm = sqlhelper.ExecuteNonQuery(sql, paras);
11 if (sm > 0)
12 {
13 tag = true;
14 }
15 return tag;
16 }
17 public int ExecuteNonQuery(string sql, SqlParameter[] parems)
18 {
19 int i;
20 using (cmd = new SqlCommand(sql, getconn()))
21 {
22 cmd.Parameters.AddRange(parems);
23 i = cmd.ExecuteNonQuery();
24 }
25 return i;
26 }
其实也就是通过一个参数的传递来防止这种情况的发生,上面的代码没有加注释,如有什么不懂的请留言。