白名单校验是防范注入漏洞最有效方式,需在接口入口按参数类型设定明确规则:字符串用正则、数值限范围、枚举比集合、文件验三要素,并在网关或框架层前置执行,结合多维约束与waf日志闭环优化。

直接在接口入口处限定合法参数的格式、范围和类型,是防范SQL注入、XSS、命令执行等注入类漏洞最有效的方式。白名单不是“多加一层过滤”,而是把非法输入从源头挡在外面。
明确每个参数的合法边界
不能笼统说“要校验”,而要为每个接口字段定义具体规则:
-
字符串类参数:用正则限定字符集和长度,例如用户名
^[a-zA-Z][a-zA-Z0-9_]{3,15}$,邮箱^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ -
数值类参数:限制整数范围或小数位数,如分页参数
page只允许1–1000之间的正整数 -
枚举类参数:用预定义集合比对,如
status只能是["active", "inactive", "pending"]中的一个 -
文件类参数:校验原始文件名(非路径)、MIME类型、扩展名三者一致,且扩展名仅限
["jpg", "png", "pdf"]
在请求处理最早环节执行校验
校验必须发生在业务逻辑之前,越靠近网关或路由层越好:
- 在API网关或反向代理(如Nginx、Kong)中配置基础白名单规则,拦截明显非法请求
- 框架层面统一拦截:如Spring Boot用
@Valid+ 自定义ConstraintValidator,Express用express-validator中间件 - 避免在DAO层或拼SQL前才做校验——此时攻击已进入核心流程
结合内容类型与上下文做多维约束
单一维度校验容易被绕过,需叠加判断:
- URL路径参数、查询参数、请求体字段,分别校验,不混用同一套规则
- 上传文件时,不仅要校验
filename字段,还要检查Content-Type头与实际文件头(magic bytes)是否匹配 - 对JSON接口,先解析再校验结构;对表单提交,按
application/x-www-form-urlencoded规范解析后校验 - 敏感操作(如删除、转账)额外校验Referer、Origin或CSRF Token,不依赖参数本身
配合WAF与日志形成闭环反馈
白名单不是一劳永逸,需要持续验证和调优:
- 初期将WAF设为“仅记录”模式,观察真实流量中哪些合法请求被误判,据此优化白名单正则或枚举值
- 所有校验失败请求必须记录详细上下文(IP、User-Agent、原始参数、触发规则),用于溯源和规则迭代
- 对确需宽松处理的场景(如富文本编辑器内容),采用“白名单+上下文隔离”策略:单独字段、独立存储、渲染时再做HTML转义
- 定期扫描接口文档与代码,确保新增参数同步加入白名单校验,避免遗漏











