php/php-src 官方安全公告 ghsa-7qpv-r5mr-78m4(2026-07-30,high):ext-pgsql 存在可通过 e'...' 反斜杠逃逸实现的 sql 注入。当应用把用户可控值拼进 pgsql 查询的字面量时,攻击者可以借助 postgresql 的 e 字符串转义规则改变查询语义。

▲ 事件来源页面实时截图:php/php-src Security Advisories
影响与处置
影响启用 pgsql 扩展的应用,修复于 7 月批次(8.5.9 / 8.4.24 / 8.3.33 / 8.2.33)。排查业务中 pgsql 查询的参数构造方式,优先改用参数化查询;版本上直接升级到当前最新补丁版本。
转义字符串里的反斜杠
PostgreSQL 的 E'...' 形式(escape string)与标准字符串对反斜杠的解释不同。ext-pgsql 在转义时未按 E'' 语法一致处理,导致反斜杠可被二次解释,攻击者能借此提前闭合字符串、把数据拼进 SQL 语句,形成注入。
修复与长期方案
修复统一了转义逻辑。但根本解法是改用预处理语句与参数绑定:pg_query_params 之类的 API 让数据与语句分离,不依赖转义正确性。升级后建议顺带搜索代码库中「转义后拼 SQL」的写法,逐个替换为参数化查询。
修复补丁(官方提交)
该问题由 php-src 官方提交 ab048bd83b57 修复(2026-07-27),提交说明为「Fix SQL injection in ext-pgsql via E'...' backslash breakout」。改动涉及 5 个源码/测试文件,核心变更如下:
ext/pgsql/pgsql.c
@@ -4469,7 +4469,7 @@ static int php_pgsql_convert_match(const zend_string *str, const char *regex , s
*/
static zend_string *php_pgsql_add_quotes(zend_string *src)
{
- return zend_string_concat3("E'", strlen("E'"), ZSTR_VAL(src), ZSTR_LEN(src), "'", strlen("'"));
+ return zend_string_concat3("'", strlen("'"), ZSTR_VAL(src), ZSTR_LEN(src), "'", strlen("'"));
}
/* }}} */
@@ -4747,7 +4747,6 @@ PHP_PGSQL_API zend_result php_pgsql_convert(PGconn *pg_link, const zend_string *
zend_string *str;
/* PostgreSQL ignores \0 */
str = zend_string_alloc(Z_STRLEN_P(val) * 2, 0);
- /* better to use PGSQLescapeLiteral since PGescapeStringConn does not handle special \ */
ZSTR_LEN(str) = PQescapeStringConn(pg_link, ZSTR_VAL(str),
Z_STRVAL_P(val), Z_STRLEN_P(val), &escape_err);
if (escape_err) {
▲ 补丁片段摘自 php-src 官方仓库该提交
完整补丁与测试用例可在 php-src 仓库该提交页面查看:https://github.com/php/php-src/commit/ab048bd83b578119cf81b456526d50498421d617

▲ 官方公告页配图

▲ 官方修复提交页面截图
关键信息
| 项目 | 内容 |
|---|---|
| 类目 | 安全漏洞 |
| 级别 | 高 |
| 日期 | 2026-07-30 |
| 关联编号 | CVE-2026-17543 / GHSA-7qpv-r5mr-78m4 |
| 影响范围 | 启用 pgsql 扩展的应用 |
| 核验状态 | 已官方确认 |
| 修复提交 | ab048bd83b57(php-src) |
来源:https://github.com/php/php-src/security/advisories/GHSA-7qpv-r5mr-78m4


















