我们正在尝试调试一些遗留代码。我们发现我们可以使用所有用户的密码“password”登录系统。我们还可以使用用户名“username”和密码“password”登录,也可以使用用户名“username”和系统中某个用户的密码登录。
这使我们认为 SQL 查询可能存在问题,该查询可能与登录表单中的用户名字段匹配列“用户名”或“用户名”字符串。(与密码相同)。
然而,不幸的是,我们不是 VB.net 的人,无论我们做什么,这种行为似乎都是一样的。这是原始代码:
SQLcommand.CommandText = "SELECT level FROM tblUsers WHERE username = """ & username & """ AND password = """ & password & """"
SQLreader = SQLcommand.ExecuteReader()
(我们不确定所有的"""
s 是关于什么的)
因此,使用我们对编程和 SQL 的了解,我们做到了:
SQLcommand.CommandText = "SELECT level FROM tblUsers WHERE `username` = """ & username & """ AND `password` = """ & password & """"
SQLreader = SQLcommand.ExecuteReader()
同样没有效果:
SQLcommand.CommandText = "SELECT level FROM tblUsers WHERE tblUsers.username = """ & username & """ AND tblUsers.password = """ & password & """"
SQLreader = SQLcommand.ExecuteReader()
那也没有效果。
所以问题是这是 SQL 代码的问题吗?还是我们找错地方了?我认为我们没有找错地方。虽然我们不是 VB.net 的人,但我们仍然非常精通编程。还输出(跟踪)以“用户名”和“密码”作为用户名和密码的查询SQLreader(0)
返回1
,这意味着它正在匹配某些东西。
任何帮助都会很棒。有什么我们忽略的吗?
谢谢
(免责声明:此代码不在生产环境中的任何地方使用。大家现在可以放松了!)