You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP登录页面SQL注入绕过方法咨询(校园项目需求)

让我先拆解下你的代码情况,再说说为什么你之前的注入尝试没成功,以及有没有可行的思路:

为什么OR 1=1 --无法绕过你的登录?

你的登录处理代码里,对username、email、password三个参数都用了mysqli_real_escape_string()做了转义处理——这个函数会把输入里的单引号(')转义成\',所以你输入的OR 1=1 --会被转义成\'OR 1=1 --,没办法闭合SQL语句里的单引号,自然没法改变原有的查询逻辑。

另外你的查询语句是三个条件用AND连接的:

SELECT * FROM users WHERE username='$username' AND email='$email' AND password='$password'

就算其中一个字段的注入能生效,AND的优先级比OR高,剩下的两个条件还是会要求匹配,所以单纯的OR 1=1也没法让整个条件恒真。

当前代码下,有没有SQL注入绕过的可能?

在你现在的实现里,常规的SQL注入绕过几乎是不可能的,原因有两个:

  1. 所有用户输入都经过了mysqli_real_escape_string()转义,只要你的PHP数据库连接字符集和数据库本身的字符集一致(比如都是UTF-8),这个转义就能有效阻断基于单引号闭合的注入。
  2. 查询要求用户名、邮箱、密码三个条件同时匹配,就算你能绕过其中一个,另外两个字段的验证还是会卡住你——尤其是密码还做了MD5哈希后再拼接进SQL,你没法通过注入伪造一个有效的MD5匹配。

不过如果是为了完成你的校园项目测试(模拟未防护的场景),你可以先临时去掉mysqli_real_escape_string(),这时候就能用经典的注入语句绕过了:

  • 用户名输入:' OR 1=1 --
  • 邮箱输入:' OR 1=1 --
  • 密码随便输入

这时候SQL语句会被拼接成:

SELECT * FROM users WHERE username='' OR 1=1 --' AND email='' OR 1=1 --' AND password='xxx'

--会注释掉后面的所有条件,最终查询条件变成username='' OR 1=1,也就是恒真,就能直接绕过登录了。

内容的提问来源于stack exchange,提问作者Coolkeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 14:42:38