昨天,我收到了一位安全研究人员的邮件,指出当用户控制的输入作为 Laravel 的 unique
规则的“排除 ID”参数传递时,可能会发生 SQL 注入,例如
Rule::unique('users')->ignore($request->input('id'))
unique
规则的“排除 ID”功能旨在仅接受系统生成的 ID,例如自动递增 ID 或应用程序生成的 UUID,这是文档中唯一演示使用该规则的方法:
Rule::unique('users')->ignore($user->id)
但是,如果用户偏离该功能的文档化用法,并允许用户控制的数据来指定“排除 ID”值或列,则恶意制作的请求可能会导致 SQL 注入攻击。
因此,我们在唯一验证规则文档中添加了一个红色警告,指出该规则应仅按文档使用,并警告用户不要允许用户控制的输入作为此规则的参数。
即使开发人员意外地允许用户控制的输入传递给此规则,框架也可能能够阻止 SQL 注入。我们将在即将发布的 Laravel 版本中对此进行彻底研究。
此规则的文档可以在此处查看:https://laravel.net.cn/docs/5.8/validation#rule-unique