Psalm污点分析未检测到SQL注入代码,寻求解决方案
解决Psalm未检测到SQL注入漏洞的问题
问题原因
Psalm的污点分析功能默认需要通过配置明确启用,无配置文件运行时,默认规则不足以识别PDO查询中的SQL注入风险。
解决方案
1. 生成并配置Psalm配置文件
首先生成默认配置文件:
vendor/bin/psalm --init
打开生成的psalm.xml文件,在<psalm>根标签内添加或修改以下配置,确保污点分析启用并设置合适的错误级别:
<psalm errorLevel="1" resolveFromConfigFile="true" > <taintAnalysis enabled="true"/> <!-- 保留其他默认配置内容 --> </psalm>
errorLevel="1":让Psalm显示所有级别(从info到error)的风险提示,避免遗漏SQL注入这类问题。<taintAnalysis enabled="true"/>:明确开启污点分析核心功能。
2. 重新执行扫描
使用配置文件重新运行扫描命令:
vendor/bin/psalm ./src/index.php
此时Psalm应该会检测到未过滤的用户输入$_GET['id']直接拼接进SQL查询的风险,输出类似提示:
Tainted input from $_GET reaches PDO::query
3. 额外排查(可选)
- 确保Psalm版本为最新,旧版本可能对PDO的污点识别支持不完善:
composer require --dev vimeo/psalm:latest - 若仍无检测结果,可在
psalm.xml中确认已加载PDO的官方 stub 文件(默认已包含,用于标记PDO::query为SQL风险点):<stubs> <file name="vendor/vimeo/psalm/src/Stubs/PDO.php"/> </stubs>
内容的提问来源于stack exchange,提问作者Arthur Eudeline
相关产品推荐
相关产品推荐

