What is API ABUSE? 😥
API是调用方和被调用方之间的合同。 API滥用的最常见形式是由调用者未能履行其合同的终止引起的。 例如,如果程序在调用chroot()之后未能调用chdir(),则它违反了指定如何以安全方式更改活动根目录的约定。 图书馆滥用的另一个很好的例子是期望被调用者将可信赖的DNS信息返回给调用者。 在这种情况下,调用者通过对其行为做出某些假设(返回值可用于身份验证目的)来滥用被调用者API。 一个人也可以从另一方违反主叫方合同。 例如,如果编码器将SecureRandom子类化并返回非随机值,则违反合同。
Abstract 🙄
尚未将用于将HTTP请求参数绑定到模型类的框架绑定程序明确配置为允许或禁止某些属性
Explanation 🤓
为了简化开发并提高生产率,大多数现代框架都允许对象自动实例化并使用其名称与要绑定的类的属性匹配的HTTP请求参数进行填充。 自动实例化和对象填充可以加快开发速度,但是如果不谨慎执行就会导致严重的问题。
绑定类或嵌套类中的任何属性都将自动绑定到HTTP请求参数。 因此,即使恶意用户没有通过Web表单或API合同向客户公开,恶意用户也将能够为绑定或嵌套类中的任何属性分配值。
The vulnerability 😩
public class MyClasss implements Serializable {
// some logic
}
The solution 😊
Jackson提供了可以在类级别使用的注释(JsonIgnoreProperties)。
如此简单,只需添加@JsonIgnoreProperties(ignoreUnknown = true)上课之前。
将以下内容添加到类的顶部(而不是单个方法):
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyClasss implements Serializable {
// some logic
}
👋