用途:该技能聚焦批量赋值(自动绑定)安全反模式,适用于生成或审查“用用户输入创建/更新对象”的代码场景。资料将其严重性标为高,指出当框架自动把 HTTP 参数绑定到对象属性且未过滤时,攻击者可注入未授权属性(如 isAdmin: true)实现提权或修改受保护字段,从而绕过访问控制。
主要能力:给出反模式与安全写法对比。反模式是直接用用户提供的数据字典更新模型而不做属性过滤;安全做法是使用显式允许列表(allowlist),或更稳妥地使用 DTO/schema 校验。资料提供 Python/Flask 示例:不安全写法遍历 request_data 并 setattr;安全写法一为 ALLOWED_UPDATE_FIELDS 允许列表,安全写法二为 Pydantic 的 UserUpdateDTO,仅定义可提交字段,出现额外字段时抛出校验错误。
检测方法:资料给出基于 ripgrep 的检索思路,例如查找不安全绑定 rg 'setattr.request.|.update(request.' --type py、rg 'Object.assign.req.body|.save(req.body' --type js、rg 'BeanUtils.copyProperties|ModelMapper' --type java;查找不安全的黑名单删除模式 rg 'del.[.(admin|role|permission)|.pop(.(admin|role)' --type py、rg 'delete..(isAdmin|role)|omit(' --type js;并提示黑名单不安全,应改用允许列表。测试可用 curl -X POST /api/users -d '{"email":"test@example.com","isAdmin":true}',尝试 isAdmin、role、permissions、accountBalance、verified 等字段;还可检查 DTO 使用情况,如 rg 'class.*DTO|@Valid|validator.validate' --type py --type java。
预防要点:始终使用允许列表而非黑名单;使用 DTO 或 schema 严格定义请求体;对敏感属性在批量赋值之外显式设置(如 new_user.is_admin = False);了解并正确使用框架自带的批量赋值防护。
适用场景与限制:适合后端接口开发、代码审查与安全测试。资料未提供具体安装命令、收费信息或平台支持范围,这些暂未提供。相关参考包括 OWASP Top 10 A01:2025、OWASP API Security API3:2023、CWE-915、CAPEC-114 等。