跳转至

批量赋值 (Mass Assignment)

批量赋值攻击是一种安全漏洞,当 Web 应用程序将用户提供的输入值自动分配给程序对象的属性或变量时,就会发生这种攻击。如果用户能够修改他们本不应具有访问权限的属性(例如用户权限或管理员标志 isAdmin),这就会成为一个安全问题。

摘要 (Summary)

方法论 (Methodology)

批量赋值漏洞在那些使用对象关系映射 (ORM) 技术或函数将用户输入映射到对象属性的 Web 应用程序中最常见。在这些程序中,属性可以被一次性更新,而不是逐个更新。许多流行的 Web 开发框架,如 Ruby on Rails、Django 和 Laravel (PHP),都提供了这种功能。

例如,假设一个 Web 应用程序使用 ORM,并且有一个具有属性 username (用户名)、email (电子邮件)、password (密码) 和 isAdmin (是否为管理员) 的用户对象。在正常情况下,用户可能能够通过表单更新自己的用户名、电子邮件和密码,然后服务器将这些值分配给用户对象。

然而,攻击者可能会尝试在传入的数据中添加一个 isAdmin 参数,如下所示:

{
    "username": "attacker",
    "email": "attacker@email.com",
    "password": "unsafe_password",
    "isAdmin": true
}

如果 Web 应用程序没有检查哪些参数允许以这种方式更新,它可能会根据用户提供的输入设置 isAdmin 属性,从而赋予攻击者管理员权限。

实验环境 (Labs)

参考资料 (References)