C#防止sql注入问题

SqlParameters parm = new SqlParameters
("@FlightCode",SqlDbType.NVarchar,50);

parm.Value = txtFlightCode.Text;
cmd.Parameters.Add(parm);
//
//用户输入的只怎么被传过去了,为什么输入' or 1=1 --就不行了呢?

采用了参数法给sql传递参数

SQL注入的原理你要先了解,因为以前SQL语句是用字符串拼接来组的.所以就有人想到如果我输入一个单引号来闭合原本程序里的单引号 然后在自己加些条件呢.

加入原本代码
String SQLStr = "select * from t_users where username='"+ txtusername.Text +"'";

如果你输入'or 1=1 -- 我们的SQLStr会变成什么呢

select * from t_users where username = '' or 1=1 --'
--后面属于sql的注释 所以都忽略了 即使后面有其他条件也忽略了

所以这条SQL执行总是有返回结果,至于其他的高级的试探性语句你可以搜索其他资料

====================================================================
采用参数法添加数据的话 就不会出现这样的问题.

程序会把'or 1=1 -- 当成一个整体的字符串 然后在两头加单引号 变成这样'\' or 1=1 --' 由于\属于转义字符 所以不会闭合前面的单引号

所以这样就防止了注入

//望采纳
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-17
sss15 说得比较详细。

总结一下:
1.sql注入产生的原理是什么?不对查询语句进行处理,直接执行。如select * from table1 where id=1 or 1=1。

2.怎样会产生sql注入?如果你直接将查询条件的字符串不做任何处理,直接传参,进行查询,就会产生。如1中所示,你想查id="1"的值,而人家写的id的值为"1 or 1=1",这样就被注入了。

3.如何防止sql注入。采用SqlParameters 传递参数的方式,可防止注入。

4.哪些地方容易产生注入?
(1)通过URL传递参数,如"show.aspx?id=1",如果不对取到的id进行处理,就会被注入;(好像叫get方式)

(2)添加新闻时,新闻内容不做处理,也会被注入。因为可以在新闻内容里写查询语句,如delete * from table1,那你就哭吧;(好像叫post方式)

总之,你要传到数据库去执行的语句、参数,都要注意处理。
第2个回答  2010-08-15
使用参数或存储过程是不会存在SQL注入的
第3个回答  2010-08-15
关注...

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网