C#防止sql注入问题

SqlParametersparm=newSqlParameters("@FlightCode",SqlDbType.NVarchar,50);parm.Value=tx... SqlParameters parm = new SqlParameters
("@FlightCode",SqlDbType.NVarchar,50);

parm.Value = txtFlightCode.Text;
cmd.Parameters.Add(parm);
//
//用户输入的只怎么被传过去了,为什么输入' or 1=1 --就不行了呢?
展开
 我来答
锋利的猫
2010-08-15 · TA获得超过868个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:370万
展开全部
采用了参数法给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 --' 由于\属于转义字符 所以不会闭合前面的单引号

所以这样就防止了注入

//望采纳
summer31cn
2010-08-17 · TA获得超过111个赞
知道答主
回答量:73
采纳率:100%
帮助的人:37.9万
展开全部
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方式)

总之,你要传到数据库去执行的语句、参数,都要注意处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tmpaccount
2010-08-15 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:99.1万
展开全部
使用参数或存储过程是不会存在SQL注入的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
5never17
2010-08-15 · TA获得超过926个赞
知道小有建树答主
回答量:1136
采纳率:0%
帮助的人:412万
展开全部
关注...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式