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

PHP中用大括号包裹变量能否提升SQL注入防护能力?

关于PHP字符串大括号插值与SQL注入的问题解答

大括号是否能提升SQL注入安全性?

答案是完全不能。PHP双引号字符串中的{$username}写法只是变量插值的语法糖,它的作用仅仅是明确变量的边界(比如当变量名后面紧跟其他字符时,避免解析错误),但不会对变量的内容做任何转义、过滤处理。本质上,'{$username}'和直接写'$username'在最终生成的SQL语句上没有任何区别——输入的恶意字符依然会原封不动地被插入到SQL中,所以SQL注入的风险完全存在。

针对目标代码的SQL注入Payload

你的代码没有对$username和$password做任何转义或预处理,所以可以轻松构造Payload绕过验证:

1. 绕过指定用户的密码验证

在用户名输入框中填入:

admin' -- 

密码可以随便输入任意内容。此时生成的SQL语句会变成:

SELECT * FROM users WHERE username='admin' -- ' AND password='随便输的内容'

--是MySQL的单行注释符,后面的' AND password='xxx'会被注释掉,只要数据库中存在admin用户,就能直接登录。

2. 万能登录(无需知道任何用户名)

在用户名输入框中填入:

' OR 1=1 -- 

密码随便输入。生成的SQL语句为:

SELECT * FROM users WHERE username='' OR 1=1 -- ' AND password='随便输的内容'

OR 1=1会让WHERE条件永远为真,查询会返回所有用户记录,从而直接登录成功。

3. 基于密码输入的注入(如果用户名输入有限制)

如果用户名输入被限制,也可以在密码输入框构造Payload:比如用户名输入一个已知存在的用户(比如test),密码输入:

' OR '1'='1

生成的SQL语句:

SELECT * FROM users WHERE username='test' AND password='' OR '1'='1'

因为OR '1'='1'的存在,条件同样永远为真,实现登录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:43:41