+++++用了存储过程,还是很难做到防sql注入!

混世罗汉 2005-07-05 08:53:54
别人说用存储过程 可以彻底解决sql注入的问题,但我用了,怎么还是有这样的问题??

sqlserver存储过程如下:

CREATE PROCEDURE select_account
(
@Account [char](16),
@Pwd [char](32)
)

AS

SELECT * FROM [Account] WHERE Account=@Account And Pwd=@Pwd
GO

调用过程就不写了,就是那个para什么的

现在用 'or''='还是能直接进入,不用存在的用户名和密码,不知如何解决??????

...全文
1294 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckyprg 2005-07-28
  • 打赏
  • 举报
回复
据我所知,楼主所说的现象不应存在。
cmslovehxh 2005-07-28
  • 打赏
  • 举报
回复
根本不会出现楼主所说的问题

怀疑你可能都没有试试就直接认为是这样了。
duwunet 2005-07-15
  • 打赏
  • 举报
回复
路过.
loveeqing 2005-07-15
  • 打赏
  • 举报
回复
up
OSCAR_NJU 2005-07-15
  • 打赏
  • 举报
回复
根本不会出现楼主所说的问题,你想当然的认为存储过程的参数是字符串代入才会有这个疑问的,存储过程这点都搞不定那还说什么。

怀疑你可能都没有试试就直接认为是这样了。
ren54 2005-07-15
  • 打赏
  • 举报
回复
晕了,看看传进去的参数组合成什么样的一个select语句了!
huisz 2005-07-15
  • 打赏
  • 举报
回复
一定要mark~~!!!!!!
jimu8130 2005-07-15
  • 打赏
  • 举报
回复
学习ing,友情帮顶
张海霖 2005-07-15
  • 打赏
  • 举报
回复
我只同意SpyX(每天进步一点点)的看法
iuhxq 2005-07-15
  • 打赏
  • 举报
回复
同意“门槛”的解答
SpyX 2005-07-06
  • 打赏
  • 举报
回复
用存储过程的话,你说的问题的问题是不会出现的。
因为 'or''=' 只是做为 @Account 或 @Pwd 参数的一个值,而不是说 'or''=' 会与 SELECT * FROM [Account] WHERE Account=@Account And Pwd=@Pwd 在一起重新组合成 SELECT * FROM [Account] WHERE Account=@Account And Pwd='' or ''='' 这种形式的,所以,你说的问题是不会出现的,再看看你的其他的代码是不是有问题吧!
xu770 2005-07-06
  • 打赏
  • 举报
回复
学习
hchxxzx 2005-07-06
  • 打赏
  • 举报
回复
你那个存储过程是在数据库里面的存储过程,防止注入,是指在页面中调用参数式写入的方式.当使用参数式写入时,无论你是使用哪一种注入方式,比如or之类的,理论上,参数式写入总将这些语句当做一个单纯的文本来进行写入,所以不会出现你所说的方式.
如果使用参数式写入,那么,根本无需在数据库里面写存储过程.
如下参考写入方式

//定义SQL语句
string sql = "insert into " + this.dbTable + "(filename,filenewname,filesize,filemime,fileblob,uploadtime) " +
" values(@filename,@filenewname,@filesize,@filemime,@fileblob,@uploadtime)";

myComm.CommandText = sql;
myComm.Parameters.Add("@filename",OleDbType.VarWChar).Value = fileName;
myComm.Parameters.Add("@filenewname",OleDbType.VarWChar).Value = fileNewName;
myComm.Parameters.Add("@filesize",OleDbType.Integer).Value = fileSize;
myComm.Parameters.Add("@filemime",OleDbType.VarWChar).Value = fileMime;
myComm.Parameters.Add("@fileblob",OleDbType.LongVarBinary,fileBlob.Length).Value = fileBlob;
myComm.Parameters.Add("@uploadtime",OleDbType.DBDate).Value = uploadTime;

//写入数据库
myComm.ExecuteNonQuery();
真相重于对错 2005-07-06
  • 打赏
  • 举报
回复
要看你怎么调用这个存储过程的
李洪喜 2005-07-06
  • 打赏
  • 举报
回复
一个问题,开几个贴啊。
混世罗汉 2005-07-06
  • 打赏
  • 举报
回复
是的,还有更好的办法没????????、
love_AC 2005-07-06
  • 打赏
  • 举报
回复
最好写验证,.net比asp好多了,一个正则表达式基本就能满足。不要怕麻烦,其实很简单的啊。
bingbingcha 2005-07-06
  • 打赏
  • 举报
回复
晕到,说来说去,还不是要对客户输入的内容先作判断或过率吗?这样处理了,再写存储过程还有什么意思,无法就是快一些。我的意思是指不要判断用户输入的内容,直接传过去啊,还是有问题的。如果一开始判断了,那就不是存储过程的功劳了
---------------------------------------------------------------------

存储过程加快处理数据库的效率和有效的防止SQL注入危险..但是并不代表能完全防止SQL注入!!这个危险系数和你写程序时做的防范成正比!!如果一个存储过程提高程序的速度0.01秒的话.10个就可以提高1秒..100就可以提高10秒..1000个就可以提高100秒..对于网站来说这样的效率是非常重要的!!

另外,佩服你上面说的话..思想太懒了..连验证都不想写啊!!!
szxbluestar 2005-07-06
  • 打赏
  • 举报
回复
.net的安全机制不是会屏避掉一些非法字符的吗?
cathylang 2005-07-06
  • 打赏
  • 举报
回复
mark
加载更多回复(6)
用于加密.net WebForm的Web.Config文件中的数据库连接字符串. 本软件支持.net 2.0 和 .net 4.0. 注意事项: 1.需要安装.net4.0运行库才能运行. 2.程序中需要获取web.config路径时,可以使用复制把web.config所在路径粘贴到程序中.快捷键不是Ctrl + V而是右键选择"编辑"-"粘贴".如果右键点击程序窗口无效,可以右键点击程序标题栏. 扩展知识: 连接字符串的安全性 一、尽量使用windows验证而不是sql server验证: 1、安全性易管理 2、不需要设置用户名和密码(这样传递的时候不会被截取吧) 3、密码不会通过明文在网络上传播 原因:如果用sql server验证在配置文件中的话,用户名和密码很容易被别人看到,但是如果你用windows验证的话,用户名和密码是存储在本机windows文件中的 这就很难被人发现。 二、sql server身份验证 1、强制实施密码策略 2、强制密码过期 3、用户在下次登录时必须更改密码 怎么设置:直接在sql server中进行设置 如果是sql server验证的话,Persist security info 一定设置为false,这样会保证敏感信息不被暴露(如ID、密码)。 三、sql注入攻击: 这个注入好像是打开Min Pool Size=999999一个很大的值,来破坏数据库。 这个链接保护的方法最好是: Date Source=(local);Initial Catalog=Works;User ID=sa;Password="password01!;Pooling=true" 看到后面没有,加一个双引号。 四、在配置文件存储链接字符串: 然后在connection.config里有这样的设置: 注意:connection.config属性需要设置,设置为复制到应用程序里面。不然web.config就找不到这个文件。 五、用RSA非对称加密。网上查。 六、asp.net iis注册工具(aspnet_regiis.exe) 使用加密:aspnet_regiis -pef "connectionStrings" F:\study\ComputerDM\Web 解密:aspnet_regiis -pdf "connectionStrings" F:\study\ComputerDM\Web

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧