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 --就不行了呢? 展开
("@FlightCode",SqlDbType.NVarchar,50);
parm.Value = txtFlightCode.Text;
cmd.Parameters.Add(parm);
//
//用户输入的只怎么被传过去了,为什么输入' or 1=1 --就不行了呢? 展开
4个回答
展开全部
采用了参数法给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 --' 由于\属于转义字符 所以不会闭合前面的单引号
所以这样就防止了注入
//望采纳
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 --' 由于\属于转义字符 所以不会闭合前面的单引号
所以这样就防止了注入
//望采纳
展开全部
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方式)
总之,你要传到数据库去执行的语句、参数,都要注意处理。
总结一下:
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方式)
总之,你要传到数据库去执行的语句、参数,都要注意处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用参数或存储过程是不会存在SQL注入的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关注...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询