日期:2014-05-18  浏览次数:20381 次

百思不得其解?asp.net中SQL语句?
登录代码:
......
sqlcmd.CommandText = "SELECT [UserId],[UserLevle] FROM [UserInfo] WHERE ([UserId]='" + TextBox1.Text + "' and [UserPwd]='" + TextBox2.Text + "')"  
  Dim sqldr As SqlDataReader = sqlcmd.ExecuteReader()

  If sqldr.Read() Then
  If sqldr.Item(1).ToString().Equals("1") Then
  Session.Add("UserId", TextBox1.Text)
  Response.Redirect("index.aspx")
  Else
  Session.Add("UserLevle", sqldr.Item(1).ToString())
  Response.Redirect("goodsmang.aspx")
  end if
.......
问题:
要通过验证userid,userpwd两项登录,但select语句中并没有选择userpwd,为什么还能正常登录?
请各位高手帮忙看看,谢了!

------解决方案--------------------
and [UserPwd]='" + TextBox2.Text 

这里检查了用户密码,就可以正常登录了。
------解决方案--------------------
用户密码只需在 where 中检验与数据库中的相符就OK了,不必出现在 select 列表中。
------解决方案--------------------
不是看select 了什么。而是看后面的条件符合不符合。
后面同时检查了用户名和密码。只要符合条件就可以正常登录。
------解决方案--------------------
select语句中选择什么都行,*也可以,都不碍事,
只要限制,where 条件是userId=? and userPwd=?就可以正常登录了 

------解决方案--------------------
Select后面的字段是需要从数据库中取出的字段,你如果不想获得userpwd,当然就不需要select userpwd了啊。
------解决方案--------------------
SQl中的Select 语句非常强大,也非常复杂,建议仔细去学习它。

------解决方案--------------------
如果用户在TextBox1里面输入“1' or '1'='1”,你们觉得结果会怎么样啊?

是不是就构造了这样一个sql语句:
select userid,userlevel from user where username='1' or '1'='1' and password='随便写点什么'

这个条件始终为真,则可以登录。

------解决方案--------------------
汗水...验证是在where子句啊,select后面是要显示的内容-0-PS:这样写确实存在SQL注入问题--0--
------解决方案--------------------
用户密码只需在 where 中检验与数据库中的相符就OK了,不必出现在 select 列表中
------解决方案--------------------
在 where 条件后判断了 密码就可以