PHP请求参数过滤
PHP请求参数过滤
引言
Web接口接收GET、POST参数,如果不做过滤校验,容易出现SQL注入、XSS、业务逻辑漏洞。PHP开发接口时,参数过滤是安全第一道防线,所有外部输入都不可信。
基础过滤思路
- 类型强制转换:数字参数直接转为int;
- 长度限制,防止传入超大字符串;
- 正则匹配手机号、邮箱等固定格式;
- 输出到页面时做html转义,防止XSS;
- 入库前转义或者使用PDO预编译防止注入。
代码示例
<?php
// 获取GET参数
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$name = trim($_GET['name'] ?? '');
// 长度校验
if(mb_strlen($name)>50){
exit("参数过长");
}
// 输出到页面,防XSS
echo htmlspecialchars($name,ENT_QUOTES);
框架层面最佳实践
TP6、Laravel等框架自带验证器,推荐优先使用框架验证,不用手写大量if判断。
// ThinkPHP6验证示例
$validate = new \think\Validate([
'id'=>'require|integer',
'name'=>'require|max:50'
]);
避坑点
不要简单依靠addslashes防御注入,推荐PDO预处理语句;参数过滤不要只在前端校验,后端必须二次校验,前端校验可被绕过。
总结
任何外部传入的数据都要校验,区分类型校验、长度校验、格式校验、输出转义四层防护,降低Web安全漏洞风险,是PHP项目开发的基础规范。