为什么要避免 Method.invoke?

问题描述

guideline 9-11 / ACCESS-11

注意 java.lang.reflect.Method.invoke 在检查 直接呼叫者

Secure Coding Guidelines for Java SE 中,声明在确定直接调用者时忽略 Method.invoke 实现,否则将在所有权限下执行操作。到目前为止,这对我来说很清楚,但后来又说:“因此,避免 Method.invoke”。

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

解决方法

使用反射调用方法时存在固有风险(如在 Java 或 C# 中)。引用 Unsafe use of reflection

的 OWASP 漏洞描述页面

如果攻击者可以提供应用程序随后使用的值 确定要实例化的类或调用的方法, 攻击者有可能通过创建控制流路径 应用程序开发人员不打算使用的应用程序。