这样写安全吗?如果是你会怎么做

AlickZhang 2003-12-18 11:04:28
很简单的一个登陆界面:
一个输入用户名的输入框,一个输入密码的输入框,还有一个提交按钮

用户输入用户名和密码后,假设我在后台得到该用户名和密码,然后这样验证:
id - 代表得到的用户名
password - 代表得到的密码
sql语句这样写:
select count(*) from 表 where 用户名= 'id' and 密码 = 'password '

然后根据返回值,如果是0就说明输入不合法,如果大于0就说明合法

大家觉得这样写会有什么问题吗,我在试验时发觉这样会有很大的安全问题

诸位知道如何破解这样的情况吗,还有如何加以改进


...全文
49 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
acewang 2003-12-18
  • 打赏
  • 举报
回复
不好意思,吃饭去了 :-)
1.参考: http://expert.csdn.net/Expert/topic/2560/2560749.xml?temp=.7396662
2.我说的方式是顺手粘你的Sql,没细改不好意思 :-( 当然你也大致理解意思,就是User和Password分开详细判断,过滤掉字符也更好,其实可以参考微软PetShop的例子
FoxLinn 2003-12-18
  • 打赏
  • 举报
回复
用md5 加密吧。
zhaozhongju 2003-12-18
  • 打赏
  • 举报
回复
两个建议:
一、用存储过程

二、先选择USER ID,如存在,再判断PASS
dayasky 2003-12-18
  • 打赏
  • 举报
回复
请问哪些是非法字符呢?
还有用什么样的SQL语句输入不限定长度的文本框能强行进入?
zytp 2003-12-18
  • 打赏
  • 举报
回复
需要对用户名和密码框输入的字符进行过滤吧!
Talent2001k 2003-12-18
  • 打赏
  • 举报
回复
数据库中的USER和PASS字段最好是加密的字符串,然后讲TEXTBOX里输入的字符也用同样方法加密再去SELECT,这样就不怕用户在TEXTBOX里动坏脑筋了
nova2001 2003-12-18
  • 打赏
  • 举报
回复
学习!!!
AlickZhang 2003-12-18
  • 打赏
  • 举报
回复
楼上的方法可行

不过还有没有更好更方便的方法
林仪明 2003-12-18
  • 打赏
  • 举报
回复
绝对的不安全。
在取到两个字符串后
1.对两个字符串进行验证,过滤掉非法字符
2.先验证user是否存在
3.验证pass是否正确
AlickZhang 2003-12-18
  • 打赏
  • 举报
回复
to 纯情房东:
你这样写也是可以破的:P

to 大灰狼:
/
select count(*) from 表 where 用户名= 'id'
返回数据集,判断返回条数和是不是'Password'
/

?? 返回条数和 -- Password
这两个没关系吧
你的意思应该是根据用户名来查出密码,然后在比较密码是否正确吧
yaotiebing 2003-12-18
  • 打赏
  • 举报
回复
acewang() ( ) 信誉:100 2003-12-18 11:05:00 得分:0


这存在一个很典型的漏洞 :-)


什么漏洞??
AlickZhang 2003-12-18
  • 打赏
  • 举报
回复
还有这两个输入框有长度限制

所以写长的SQL来破肯定行不通

就假设不超过16个字母好了

acewang 2003-12-18
  • 打赏
  • 举报
回复
select count(*) from 表 where 用户名= 'id'
返回数据集,判断返回条数和是不是'Password'
jianciwen 2003-12-18
  • 打赏
  • 举报
回复
我的登录验证代码是这样的:
SqlConnection1.Open()
Dim cma As New SqlClient.SqlCommand
cma.Connection = SqlConnection1
cma.CommandText = "select * from 表 where ID='" & TextBox1.Text & " 'And password = '" & TextBox2.Text & "'"
Dim read As SqlClient.SqlDataReader = cma.ExecuteReader
If read.Read() = True Then

Response.Redirect("webform.aspx?id=" & TextBox1.Text)
Else
Label.Text = "帐号或密码错误,请重新输入"
End If
read.Close()
SqlConnection1.Close()

用SQLDATAREADER来验证
AlickZhang 2003-12-18
  • 打赏
  • 举报
回复
我觉得即使用存储过程还是有办法可以破的

各位还有更好的方法吗

50分我只准备给建议最好的一个人:)
weki 2003-12-18
  • 打赏
  • 举报
回复
关注!存储过程来判断要怎样写呀?
buer 2003-12-18
  • 打赏
  • 举报
回复
select count(*) from 表 where 用户名= 'id' and 密码 = 'password '
别人可以输入相应的Sql语句得到你的返回数据:)直接在数据库写一个存储过程来判断
会好一些
codinghello 2003-12-18
  • 打赏
  • 举报
回复
直接在数据库写一个存储过程来判断
acewang 2003-12-18
  • 打赏
  • 举报
回复
这存在一个很典型的漏洞 :-)
xinshaw 2003-12-18
  • 打赏
  • 举报
回复
呵呵,这是典型的注入式攻击,最好不要直接用SQL语句查数据库,加个密是个不错的办法,简单一点就是将'替换成'',或者直接不允许输入'
加载更多回复(12)

62,046

社区成员

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

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

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

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