假设您有一个网页要求您输入用于身份验证的用户名和密码。
用户名:" abs "密码为" 1234abcd " - 您可以进入您的个人资料。
但我的问题是,如果我输入" abs' - "在用户名字段中没有密码,它仍然返回我的个人资料页面?
服务器,SQL和用户幕后发生了什么?
我似乎无法理解这一点。谢谢你的帮助。
答案 0 :(得分:0)
您显然将参数替换为SQL字符串而不转义它们。该代码可能看起来像:
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
因此,在您的输入被替换后,结果是:
SELECT * FROM users WHERE username = 'abs' --' AND password = ''
您输入的用户名中的引号正在终止字符串。然后--
开始注释,因此忽略查询的其余部分。因此,您已将查询转换为:
SELECT * FROM users WHERE username = 'abs'
并且它不再检查密码。