如何安全地实现Java插件安全?

2024-03-21

我正在设计一个用于在 Java 应用程序中加载、处理和支持插件的系统。我认为在部署之前对此绝对至关重要的一个功能是能够建立一个安全的环境,在该环境中插件仅限于允许其执行的操作。

我无法理解如何以编程方式使用策略文件而不在启动时运行 -Djava.security.manager 参数。所以现在就这样了。

我的下一个想法是在我自己的 SecurityManager 子类中覆盖 SecurityManager 中我关心的所有方法,并对谁可以执行它们进行限制。

然后问题就出现了,找出谁在请求此权限的唯一方法是通过线程 ID 检查。因此,我设计了一个系统,所有插件线程都驻留在其中,并且只能驻留在 PluginThreads 线程组中。

这一直有效……直到一切开始爆炸。问题在于,一些被阻止的事情是由 Sun 的代码执行的内部操作。

因此,即使是最基本的操作(例如打开窗口)也会失败,因为我的安全经理拒绝访问 Sun 的代码。使用我的线程检查方法无法解决此问题,因为 Sun 的代码是在 PluginThreads 组中执行的。

所以我需要知道的是:

1)是否有可能有一种方法可以找出使用当前线程进行调用的上下文?

2)有没有更好的方法来做到这一点,我不知道?

3)如果该方法涉及策略文件,如何将它们加载到代码中?

4)您还能想到其他方法来防止Sun内部Java代码被阻塞吗?


The SecurityManager真是一团糟。您应该考虑要求插件使用 Java 子集编写,这样您就可以合理地推断它们可以做什么,而不是迭代地授予更多可能被滥用的权限,直到它看起来起作用。

Joe-E http://code.google.com/p/joe-e/提供可分解的安全性。从http://lambda-the-ultimate.org/node/3830 http://lambda-the-ultimate.org/node/3830 :

我们推出 Joe-E,一种旨在支持安全软件系统开发的语言。 Joe-E 是 Java 的一个子集,可以更轻松地构建和实现具有强大安全属性的程序,这些安全属性可以在安全审查期间进行检查。它使程序员能够将最小特权原则应用于他们的程序;实施无法绕过的特定于应用程序的参考监视器;引入和使用特定于领域的安全抽象;安全地执行不受信任的代码并与之交互;并构建安全、可扩展的系统。 Joe-E 演示了如何实现对象能力语言的强大安全属性,同时保留主流面向对象语言的功能和感觉......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何安全地实现Java插件安全? 的相关文章

  • Java Runtime.getRuntime().freeMemory() 问题

    我搜索并看到了一些线程 但没有一个能够解决我遇到的具体问题 我正在尝试使用以下方式监视我的内存使用情况Runtime getRuntime freeMemory Runtime getRuntime maxMemory and Runtim
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 需要使用 joda 进行灵活的日期时间转换

    我想使用 joda 解析电子邮件中的日期时间字符串 不幸的是我得到了各种不同的格式 例如 Wed 19 Jan 2011 12 52 31 0600 Wed 19 Jan 2011 10 15 34 0800 PST Wed 19 Jan
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • 如何使用play框架上传多个文件?

    我在用play framework 2 1 2 使用java我正在创建视图来上传多个文件 我的代码在这里 form action routes upload up enctype gt multipart form data
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • 使用 jQuery 获取元素的真实宽度

    我正在为 html 文件的 视觉正确性 编写一个验证器 目标是检测太宽的元素 这是我的问题的演示 http jsfiddle net vv68y 2 红色虚线表示文档的最大宽度 本例中为 200px 第一段很好 但第二段太宽了 尽管如此 以
  • 刷新所有 Azure 实例上的数据

    刷新所有 Azure 实例中的数据的最佳方法是什么 我有多个实例 每个实例都运行相同的 Web 角色 角色启动时 数据从 Blob 存储读取到本地存储 网站使用的数据会间歇性地有新的更新 我希望能够以编程方式通知每个实例 以将更新的数据从
  • 如何在Terraform中输出一种类型的所有资源?

    我有一堆aws ecr repositories在我的 Terraform 代码中定义 resource aws ecr repository nginx images name nginx test resource aws ecr re
  • 获取字符串形式的属性名称

    我需要一种方法来传递属性并获取分配给它的名称 有什么建议么 property nonatomic retain MyObject crazyObject NSString str SOME WAY TO GET PROPERTY NAME
  • 设置可选参数默认值的 phpdoc 标准?

    Example This function will determine whether or not one string starts with another string param string haystack p The st
  • 如何在 Objective-C 中内联声明好的旧 C 数组?

    这是我的代码 NSUInteger indexArr 1 2 3 4 NSIndexSet indexSet NSIndexPath indexPathWithIndexes indexArr length 4 有没有办法声明indexAr
  • BEM 块、命名和嵌套

    我正在尝试了解 BEM 命名约定 我被困在这个问题上 我可能误解了一些东西 让我们看看 我有一个侧边栏导航和一个内容导航 我的侧边栏导航看起来像这样 div class sidebar ul class sidebar nav li cla
  • Eclipse 作为 IDE + Mercurial 用于版本控制 + ?错误跟踪 = 好主意? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 对于一个新的 Java Web 项目 我考虑使用 Eclipse 作为 IDE Mercurial 用于版本控制 某种错误跟踪软件 我听说过错误
  • 如果没有打印语句,循环看不到其他线程更改的值

    在我的代码中 我有一个循环等待其他线程更改某些状态 另一个线程可以工作 但我的循环从未看到更改后的值 它永远等待 然而 当我放一个System out println在循环中声明 它突然起作用了 为什么 以下是我的代码示例 class My
  • 如何迭代json对象的所有子节点?

    我想迭代 json 对象的所有节点 并写出一个简单的键值映射 如下所示 name first John last Doe items name firstitem stock 12 name 2nditem stock 23 company
  • 在 dplyr 中使用 select 函数时保留列标签

    我组合了多个数据集并仅保留特定列 但是 当我使用 dplyr 中的选择函数时 它不会保留原始列标签 在我的情况下为项目文本 导入数据后 我使用以下代码来选择要保留的变量 Wave1Data Clean lt select Wave1Data
  • 在Python中使用networkx绘制二部图[重复]

    这个问题在这里已经有答案了 我有一个二分图的 n1 n2 双邻接矩阵 A 矩阵 A 是 scipy sparse csc 矩阵 我想使用 Networkx 中的 A 绘制二分图 假设节点根据其称为 node class 的类标签进行着色 我
  • JetBrains Rider 在 Mac 上启用 ASP.NET MVC 迁移

    我在 macOS Mojave 上安装了 JetBrains Rider 2018 3 我创建了一个 ASP NET MVC 项目 安装了实体框架 6 2 我将连接字符串添加到 web config 中 但是 我不知道如何配置app con
  • Android 中的 USB 加密狗识别 - Beaglebone

    Issue Beaglebone 中的 Android JellyBean4 1 2 无法识别某些华为 USB Dongle 详细 我正在使用在 Android JellyBean4 1 2 上运行的 BeagleBone Huawei E
  • Android NDK调试:设备无法打开

    我现在正在尝试调试我的本机库一段时间 但它不起作用 本机代码可以工作并编译 但出于优化目的 我确实需要调试本机代码 我已经阅读并遵循了许多教程 例如教程1 http mhandroid wordpress com 2011 01 23 us
  • 从 JSON 文件读取数据

    假设我有一个 JSON 文件位于http www randomurl com jobs json http www randomurl com jobs json 它看起来像这样 jobs task turn burgers who Ann
  • 如何在多个环境中处理 OmniAuth 回调?

    我有一个应用程序专门使用 Facebook 作为身份验证提供程序 并已正确设置生产模式的回调 为了实现这一点 您需要为 Facebook 应用程序提供一个站点 URL 和一个用于回调的站点域 在我的例子中是http appname hero
  • Swift 中迭代对象类属性

    Swift 中有没有一种简单的方法来迭代类的属性 即我有一个 Person 类 它有 3 个属性 姓名 姓氏 年龄 有没有类似的东西 for attribute in Person println attribute attribute v
  • 如何在 CQL3 中使复合键列具有空列值

    这听起来可能很愚蠢 因为 SQL 的复合主键中没有空值 但只是想确认我们是否可以在 CQL3 中拥有相同的功能 因此 我们有一个像这样的表来存储宽行 CREATE TABLE keyspace12 colFamily1 id text co
  • 如何安全地实现Java插件安全?

    我正在设计一个用于在 Java 应用程序中加载 处理和支持插件的系统 我认为在部署之前对此绝对至关重要的一个功能是能够建立一个安全的环境 在该环境中插件仅限于允许其执行的操作 我无法理解如何以编程方式使用策略文件而不在启动时运行 Djava