首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

请问个关于SqlParameter的初级有关问题

2012-12-17 
请教个关于SqlParameter的初级问题。在ASP.NET中,以前一直用 new SqlParameter(@pwd,pwd);但是有前辈说不

请教个关于SqlParameter的初级问题。
在ASP.NET中,以前一直用 

new SqlParameter("@pwd",pwd) 
 ;但是有前辈说不能用这种写法,这样和 
select id from users where pwd = '+pwd+'
 没什么两样,不能防止 SQL 注入,于是我自己又写了个简单的程序测试了一遍,没发现 
new SqlParameter("@pwd",pwd) 
 这种写法能 SQL 注入啊,难道这种写法不能防止 SQL 注入?纳了闷了,求高人指点。
[最优解释]
个人认为楼主的写法已经可以了,声明了参数以后,就是加了‘什么的符号,SQL SERVER 也是把它当成参数,而不会当成是SQL命令的一部分。当前最好是加上类型限定,长度什么的最舒服了。不过前辈嘛,你知道的,要多敬重,要多学习,一点点小事情不用这么较真。
[其他解释]
string sql = "select ID from users where pwd = @pwd";
        SqlDataReader sdr = SqlHelper.ExecuteReader(conn,CommandType.Text,sql,new SqlParameter("@pwd",pwd));

这就是参数化查询了,这样做pwd里面不管是什么,数据库都把它当成一个参数,而不是查询结构的一部分。
[其他解释]
也许是你前辈在想着其他的技术点,随口这么一说..
[其他解释]
1、反正我觉得LZ是正确的。

2、个人从来不管注入不注入的,完全交给sql防注入硬件,还有usb-key,注入不注入懒的去管。
[其他解释]
楼主这样写,应该是正确的,你们前辈应该是让你加上类型等等的限制吧 、我就是用sql参数哇。没听过这种方式还跟字符串拼接一样的。应该是你听错啦。
[其他解释]
我操,楼上多少人不看问题就回答啊。。。。我觉得楼主前辈是SB
[其他解释]
用参数,别用拼接,拼接很容易被注入的
[其他解释]
new SqlParameter("@pwd",pwd)  
这种写法比拼接好
[其他解释]
传参更好 更不容易被注入 
而且 你用拼接的时候 正常的非注入数据 有可能会遇到传过来的有"'" 造成执行失败
[其他解释]
new SqlParameter("@pwd",pwd);
select id from users where pwd = @pwd;//执行这个sql才叫带参数的,你那样还是拼接字符串
[其他解释]
想更严格一些可以在参数中加上长度,类型等限定,也许前辈是这个意思。
[其他解释]
引用:
new SqlParameter("@pwd",pwd);
select id from users where pwd = @pwd;//执行这个sql才叫带参数的,你那样还是拼接字符串


我就是这样写的:
string sql = "select ID from users where pwd = @pwd";
        SqlDataReader sdr = SqlHelper.ExecuteReader(conn,CommandType.Text,sql,new SqlParameter("@pwd",pwd));

[其他解释]
引用:
想更严格一些可以在参数中加上长度,类型等限定,也许前辈是这个意思。

嗯,对,我想他应该是这个意思吧,但是也不能说以前的那种写法不能防止 SQL 注入啊,除非他以前注入成功过。
[其他解释]
引用:
用参数,别用拼接,拼接很容易被注入的

我就是用的参数,
string sql = "select ID from users where pwd = @pwd";         SqlDataReader sdr = SqlHelper.ExecuteReader(conn,CommandType.Text,sql,new SqlParameter("@pwd",pwd));  



[其他解释]
参数还有一个好处就是,参数化的sql查询,可以重用执行计划,大大降低sqlserver的cpu消耗。
[其他解释]
引用:
引用:
想更严格一些可以在参数中加上长度,类型等限定,也许前辈是这个意思。
嗯,对,我想他应该是这个意思吧,但是也不能说以前的那种写法不能防止 SQL 注入啊,除非他以前注入成功过。

你对'处理了么,没有的话,如果@pwd输入一个'123你试试会不会报错呢
[其他解释]
   其实编程久了就是一个习惯问题。。细节往往是你进入大公司首要条件..
90%以上的大中型项目都会使用参数化而不是字符串拼接,好处楼主百度一下就知道了。
[其他解释]
引用:
其实编程久了就是一个习惯问题。。细节往往是你进入大公司首要条件..
90%以上的大中型项目都会使用参数化而不是字符串拼接,好处楼主百度一下就知道了。

我用的就是参数的形式啊。
[其他解释]
引用:
引用:
引用:
想更严格一些可以在参数中加上长度,类型等限定,也许前辈是这个意思。
嗯,对,我想他应该是这个意思吧,但是也不能说以前的那种写法不能防止 SQL 注入啊,除非他以前注入成功过。
你对'处理了么,没有的话,如果@pwd输入一个'123你试试会不会报错呢

没有报错啊。
[其他解释]
我用的是这种方法:
string sql = "select ID from users where pwd = @pwd";         SqlDataReader sdr = SqlHelper.ExecuteReader(conn,CommandType.Text,sql,new SqlParameter("@pwd",pwd
,麻烦各位回复前先看一遍问题再回复。
[其他解释]
引用:
楼主这样写,应该是正确的,你们前辈应该是让你加上类型等等的限制吧 、我就是用sql参数哇。没听过这种方式还跟字符串拼接一样的。应该是你听错啦。
我好像没听错,他是这么说的。。。
[其他解释]


引用:
个人认为楼主的写法已经可以了,声明了参数以后,就是加了‘什么的符号,SQL SERVER 也是把它当成参数,而不会当成是SQL命令的一部分。当前最好是加上类型限定,长度什么的最舒服了。不过前辈嘛,你知道的,要多敬重,要多学习,一点点小事情不用这么较真。
o(︶︿︶)o 唉,心里感觉怪怪的。
[其他解释]
引用:
引用:也许是你前辈在想着其他的技术点,随口这么一说..这种技术性的东西随便一说那还了得。

直接去找前辈啊
[其他解释]
引用:
也许是你前辈在想着其他的技术点,随口这么一说..
这种技术性的东西随便一说那还了得。
[其他解释]
该回复于2012-11-21 05:56:05被管理员删除
[其他解释]
引用:
想更严格一些可以在参数中加上长度,类型等限定,也许前辈是这个意思。


+++
[其他解释]
这样才是参数化查询


SqlParameter[] parameters = {
new SqlParameter("@StartTime", SqlDbType.DateTime,8),
new SqlParameter("@EndTime", SqlDbType.DateTime,8),
new SqlParameter("@UserName", SqlDbType.NVarChar,15)};
            parameters[0].Value=StartTime;
            parameters[1].Value=EndTime;
            parameters[2].Value=UserName;

------其他解决方案--------------------


引用:
引用:
想更严格一些可以在参数中加上长度,类型等限定,也许前辈是这个意思。

+++


但愿。。。
[其他解释]
引用:
我操,楼上多少人不看问题就回答啊。。。。我觉得楼主前辈是SB


1、第一句:确实有不少人不看问题就回答。
2、第二句:这话这么说不太合适。。。
[其他解释]
引用:
string sql = "select ID from users where pwd = @pwd";
        SqlDataReader sdr = SqlHelper.ExecuteReader(conn,CommandType.Text,sql,new SqlParameter("@pwd",pwd));

这就是参数化查询了,这样做pwd里面不管是什么,数据库都把它当成一……


顶一个。

热点排行