百思不得其解?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 条件后判断了 密码就可以