为什么要避免 Method.invoke?

Phi*_*ppe 9 java java-security

准则 9-11 / ACCESS-11 中

注意java.lang.reflect.Method.invoke在检查直接调用者时被忽略

Java SE安全编码指南中,指出Method.invoke在确定直接调用者时忽略实现,否则将在所有权限下执行操作。到目前为止,这对我来说很清楚,但后来声明:

因此,避免 Method.invoke

我知道Method.invoke在确定直接调用者时忽略实现是好的,但为什么应该避免它?避免它的原因是什么?

Sha*_*dra 2

使用反射来调用方法(例如在 Java 或 C# 中)时存在固有的风险。引用自 OWASP 漏洞描述页面Unsafe use of Reflection

如果攻击者可以提供应用程序使用的值来确定要实例化哪个类或要调用哪个方法,那么攻击者就有可能通过应用程序创建应用程序开发人员不希望的控制流路径。