当前位置: 首页 > 知识库问答 >
问题:

禁止脚本使用Java安全管理器访问特定的Java类

邢冷勋
2023-03-14

我已经在使用Java 8,它是Nashorn javascript引擎。在我的应用程序中,我出于各种目的从Java classess访问javaScript脚本文件。然而,也可以从javaScript代码访问Java类。但由于我的应用程序中的Javascript也可以由第三方编写,所以我想限制它们(JS脚本)访问Java模块。(特别禁止某些Java类)

我不想限制对Java类的所有访问,只是想寻找一种方法来限制或禁止某些特定的Java类。

在Nashorn中,我们可以通过使用类过滤器(覆盖“exposeToScripts()”方法)来做到这一点,如下所示。

class MyCF implements ClassFilter {
    @Override
    public boolean exposeToScripts(String s) {
      if (s.compareTo("myPackage.MyClass") == 0) return false;
      return true;
    }
}

但是我们如何使用JavaSecurity Manager来做同样的事情,或者使用ClassFilter(上面提到的)的方式足以捕获和限制所有不需要的Java类访问。

共有1个答案

翁凯定
2023-03-14

ClassFilter不能替代security manager!ClassFilter JEP页面-

/[这不会]使安全管理器对于脚本来说是多余的。在评估来自不受信任源的脚本之前,嵌入应用程序仍应启用安全管理。单独的类筛选不能提供完整的脚本“沙盒”/

ClassFilter是安全管理器之上的更好的控制。例如,您可以通过阻止访问java.lang.Thread类[及其名称子类]来避免脚本中的线程创建。

 类似资料:
  • 问题内容: 嗨,我有RMI应用程序,现在我尝试从客户端在服务器上调用一些方法。我有以下代码: 服务器已正确加载,但是在尝试致电时出现以下错误: 我已将策略文件添加为VM参数,如下所示: 它一直在说关于禁用类加载的东西,所以我想问题就在那儿……谢谢! 问题答案: 远程类加载可能很棘手。 原始帖子不包含有关代码库的任何信息。客户端的安全配置可能正确,但是无法访问远程代码。客户端直接从“代码库”中加载类

  • 我正在构建一个需要访问mysql的数据工作室连接器(应用程序脚本)。 我的所有凭据都存储在GCP Secret Manager中,希望我的应用程序脚本从Secret Manager获取凭据。 我查过了https://developers.google.com/apps-script文档,但找不到访问Secret Manager的相关类。 应用脚本获取存储在秘密管理器中的凭据的最佳方式是什么?

  • 因此,我们创建了一个包含一些私有类成员的简单类,并自动为其生成getter。但getter实际上返回了对该成员的引用,从而获得了对私有成员的完全访问权。这样可以吗?下面是一个类的代码: 主要方法代码: 和输出: [字符串1,字符串2] [字符串1、字符串2、字符串3] 我已经将getter更改为这个: 但问题仍然是,如果不是为了安全,吸气剂的作用是什么?什么是正确的书写方式?

  • 我遇到了这个问题,尝试了很长时间,仍然无法解决它。stackoverfflow中类似主题中的所有解决方案都已尝试过,但对我来说没有用处。任何帮助都将不胜感激!! 错误: 我有两个server.policy文件在RMI服务器项目,client.policy在RMI客户端项目: 我为服务器项目指定了VM参数: 对于客户项目: 以及服务器的启动程序代码: 我知道这里有使用VM参数的重复策略设置,但即使我

  • 问题内容: 关于Java安全性的这篇文章说: 每当要进行危险的操作时,Java库中的代码都会向安全管理器咨询。 那么,这到底是什么意思?说,如果我已经实现了自己的安全管理器并为整个JVM启用了它。现在,java运行时是否针对每个Java调用(例如System.out.println()等)咨询我的securitymanager,还是仅针对诸如System.exit(),文件操作等api调用进行咨询