0

我们正在使用 IBM WAS6.1 来部署我们的 Struts2 应用程序,但是每次我们尝试访问一个 bean 时,我们都会收到如下错误。在 WAS.POLICY 文件中添加特定权限可解决此问题。但是我们不想在 WAS.POLICY 文件中添加数百个权限条目。我们还尝试添加 * 通配符 WAS.POLICY,但显然我们的服务器管理员已禁用通配符。

permission ognl.OgnlInvokePermission  "invoke.com.cisco.gpe.isecure.p2p.bean.P2PVO.*";

以上不起作用,我们仍然收到如下错误

Permission:invoke.java.util.ArrayList.isEmpty : Access denied (ognl.OgnlInvokePermission invoke.java.util.ArrayList.isEmpty)


Code: ognl.OgnlRuntime  in  {file:/opt/httpd/root/apps/isecur/ibm/ccix-dev-ear/myapp.war/WEB-INF/lib/ognl-3.0.6.jar}

Stack Trace: java.security.AccessControlException: Access denied (ognl.OgnlInvokePermission invoke.java.util.ArrayList.isEmpty)

编辑:我们正在使用 Struts 2.3.16、JDK1.5、Websphere 6.1 32 位

4

2 回答 2

0

权限应按以下方式声明

“调用。<声明类>。<方法名>”

<method-name>应该是您可以使用的方法的有效名称Method.getName()。它被 OGNL 运行时用作权限缓存的键。

不可访问的权限在类java.util.ArrayList和方法名上isEmpty。然后你可以声明一个权限

permission ognl.OgnlInvokePermission  "invoke.java.util.ArrayList.isEmpty"
于 2015-03-06T09:31:00.640 回答
0

您可以使用

permission ognl.OgnlInvokePermission  "invoke.*";

但这可能过于宽泛和不安全,违背了使用安全管理器的目的。

struts2容易出现ognl注入,用一些exploit工具测试struts2后,发现以下被利用了,可能还有更多。“invoke.java.lang.Object.getClass”、“invoke.java.lang.ProcessBuilder.start”、“invoke.java.lang.ProcessBuilder.redirectErrorStream”、“invoke.java.lang.Runtime.getRuntime”、“invoke .org.apache.catalina.connector.ResponseFacade.getWriter”。

于 2017-08-11T07:57:41.373 回答