PHP Web安全实战:SQL注入防护精要
|
“PHP Web安全实战:SQL注入防护精要”——这书名我去年元旦凌晨三点在阿里云ECS控制台弹出告警时,盯着MySQL慢查询日志里第37条`SELECT FROM users WHERE name = 'admin' OR '1'='1'`反复念了四遍。不是因为拗口,是它突然卡在我刚被攻破的测试站首页右下角的PHP版本标识上:7.4.33,而书中第12页脚注明确写着“PDO::ATTR_EMULATE_PREPARES = false 必须在php.ini中硬性关闭,非文档建议”。 我实测数据:用这本书指导重构了三个遗留系统——东莞某五金B2B平台(PHP 5.6)、杭州电商中台(7.2)、还有我自建的WordPress插件仓库(8.1)。其中东莞站上线第七天,WAF日志里SQLi攻击尝试从日均217次跌到0——但第三天凌晨2:18,扫描器还是打进了`/api/v1/search?term=O'Reilly%23`这个带单引号+井号的组合。查源码发现——他们把`addslashes()`硬塞进`$_GET['term']`后,又用`mysqli_real_escape_string()`套了一层,结果双重转义反而让`\\'`逃逸成字面量反斜杠,绕过第一道过滤。书里没提这种“防御叠加失效”的真实链路,我补写了第5章附录B的321字操作笔记。 新技术是真的新。它把Libsodium的`sodium_crypto_pwhash_str()`直接嵌进用户注册流程,替代老旧的`password_hash()`;还用Rust写的`sqlx-mysql`扩展做预编译校验——这玩意儿连`INSERT INTO log (ip) VALUES ('127.0.0.1; DROP TABLE users')`都能在词法分析层就拦住。但上周五测试时,我发现它依赖的`sqlx-mysql v0.7.3`和Laravel 9.51的Query Builder存在字段别名冲突,`SELECT u.name AS user_name FROM users u`会触发`Unknown column 'user_name'`报错。这不是书的问题,是生态碎片化现实。 去年元旦我亲手重写了登录模块。删除全部拼接SQL,改用`PDO::prepare("SELECT id, salt FROM users WHERE email = ? AND status = ?")`。上线后监控显示,数据库连接池空闲率从41%升至79%。可就在第三周,渗透测试员老陈——就是那个总穿蓝格子衬衫、泡枸杞茶的家伙——用`email=admin@example.com%00'-- `绕过了`filter_var($email, FILTER_SANITIZE_EMAIL)`的截断校验,因为`%00`在PHP 7.3以下会终止字符串解析。书里第89页确实提了NUL字节风险,但没写明`mb_detect_encoding()`对`\\x00`返回false的具体行为——这点我后来补在GitHub Issue #442里了。 失败案例太典型:2023年3月佛山某政务预约系统崩溃,审计报告显示是`$sql = "DELETE FROM queue WHERE token = '" . $_COOKIE['t'] . "'"`这条代码。他们用了书里的“参数化必选清单”,却漏掉Cookie来源的合法性检查——更糟的是,`$_COOKIE['t']`没经过`urldecode()`,当攻击者传入`' OR 1=1 -- `的URL编码体,解码后直接命中漏洞。这个细节几乎所有教程都跳过,仿佛Cookie天生比GET干净似的?真这样吗?
文章配图,仅供参考 我的主观判断:它胜在敢把`mysqlnd`扩展的`mysqlnd_fetch_lengths()`底层函数调用写进第6章代码块,而不是笼统说“用原生驱动”。但第4章关于存储过程SQL注入的防护示例,居然用的是已废弃的`mysqli::multi_query()`——我们公司测试环境跑着MySQL 8.0.33,根本没法复现那个`BEGIN ... END`嵌套场景。 现在我把第11章的“防御水位图谱”贴在工位玻璃板上,每天对照更新。不过下周得抽空跑一遍MariaDB 11.3的兼容性测试——听说他们调整了PREPARE语句的错误响应码,有些`ER_PARSE_ERROR`被悄悄改成`ER_STMT_NOT_EXIST`了。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Go视角下的跨界融合:PHP工程师的技术新启迪
Go视角下的跨界融合:PHP工程师的技术新启迪
Go赋能安全运维:技术融合重塑站长防护新视野