PHP SQL安全过滤
·
代码功能分析
该PHP函数injCheck()用于检测字符串中是否包含潜在的SQL注入危险字符或模式。通过正则表达式匹配常见的SQL关键词和特殊符号,实现基础的安全过滤。
正则表达式解析
$pattern包含以下匹配规则(不区分大小写):
\b(select|insert...)\b:匹配SQL关键词(如select/insert/update等)[';]:匹配单引号或分号(\/\*|\*\/|\.\.\/|\.\/):匹配注释符(/* */)或路径跳转符(…/ ./)
建议
提升过滤精确性
$pattern = "/\b(select\s.+from|insert\s.+into|update\s.+set|delete\s.+from|union\s.+select|into\s+outfile|load_file\s*\()/i";
该优化要求关键词必须与语法结构组合出现,减少误判。
支持参数化过滤
function injCheck(array $params) {
foreach ($params as $value) {
if (preg_match($pattern, $value)) {
throw new InvalidArgumentException('参数包含SQL危险字符');
}
}
}
防御深度建议
- 结合预处理语句(PDO/MySQLi)
- 对数字类型强制类型转换
- 关键操作使用存储过程
- 记录过滤日志便于审计
注意事项
- 该函数不能替代参数化查询
- 可能误判合法内容(如包含敏感单词的普通文本)
- 需要根据业务场景调整正则规则
典型应用场景
$userInput = $_POST['search'];
try {
$filtered = injCheck($userInput);
// 继续处理安全内容
} catch (InvalidArgumentException $e) {
die('输入包含非法字符');
}
更多推荐


所有评论(0)