保卫 Java 应用程序的安全沙箱机制你需要了解一下

文件加密系统性能优化实战:从卡顿到流畅的策略调优指南 文件加密是保障企业数据安全的核心技术,其原理是通过加密算法对文件内容进行转换,确保即使数据被非法获取也无法读取。这项技术的价值在于为敏感信息构建了底层防护,广泛应用于金融、研发、设计等对数据保密性要求极高的领域。然而,在实际部署中,不合理的加密策略往往会引入显著的性能开销,导致系统卡顿,影响工作效率。本文聚焦于通过优化加密策略来提升系统性能,深入剖析了因“全格式加密”和缺乏“进程白名单”等常见配置问题引发的性能瓶颈。我们将探讨如何通过精细化的策略调整,例如建立精准的文件类型白名单与进程豁免机制,并借鉴网络优 阅读详情

640?wx_fmt=png

如果你经常阅读源码,你会发现 Java 的源码中到处都有类似于下面这一段代码

class File {
  // 判断一个磁盘文件是否存在
  public boolean exists() {
    SecurityManager security = System.getSecurityManager();
    if (security != null) {
      security.checkRead(path);
    }
    ...
  }
}

class Socket {
  public void connect(SocketAddress endpoint, int timeout) {
    ...
    SecurityManager security = System.getSecurityManager();
    if (security != null) {
       if (epoint.isUnresolved())
          security.checkConnect(epoint.getHostName(), port);
       else
          security.checkConnect(addr.getHostAddress(), port);
       }
    }
    ...
  }
}

class ServerSocket {
  public void bind(SocketAddress endpoint, int backlog) {
    ...
    SecurityManager security = System.getSecurityManager();
    if (security != null)
       security.checkListen(epoint.getPort());
    ...
  }
}

class System {
  public static String getenv(String name) {
    SecurityManager sm = getSecurityManager();
    if (sm != null) {
       sm.checkPermission(new RuntimePermission("getenv."+name));
    }
    return ProcessEnvironment.getenv(name);
  }
}

我们平时在本地运行 java 程序时通常都不会默认打开安全检查器,需要执行 jvm 参数才会打开

$ java -Djava.security.manager xxx
$ java -Djava.security.manager -DDjava.security.policy="${policypath}"

// 内置扩展库授权规则
// 表示 JAVA_HOME/jre/lib/ext/ 目录下的类库可以全权访问任意资源
// 包含 javax.swing.*, javax.xml.*, javax.crypto.* 等等
grant codeBase "file:${{java.ext.dirs}}/*" {
 permission java.security.AllPermission;
};

// 其它类库授权规则
grant {
 // 允许线程调用自己的 stop 方法自杀
 permission java.lang.RuntimePermission "stopThread";
 // 允许程序监听 localhost 的随机可用端口,不允许随意订制端口
 permission java.net.SocketPermission "localhost:0", "listen";
 // 限制获取系统属性,下面一系列的配置都是只允许读部分内置属性
 permission java.util.PropertyPermission "java.version", "read";
 permission java.util.PropertyPermission "java.vendor", "read";
 permission java.util.PropertyPermission "java.vendor.url", "read";
 permission java.util.PropertyPermission "java.class.version", "read";
 permission java.util.PropertyPermission "os.name", "read";
 permission java.util.PropertyPermission "os.version", "read";
 permission java.util.PropertyPermission "os.arch", "read";
 permission java.util.PropertyPermission "file.separator", "read";
 permission java.util.PropertyPermission "path.separator", "read";
 permission java.util.PropertyPermission "line.separator", "read";
 permission java.util.PropertyPermission "java.specification.version", "read";
 permission java.util.PropertyPermission "java.specification.vendor", "read";
 permission java.util.PropertyPermission "java.specification.name", "read";
 permission java.util.PropertyPermission "java.vm.specification.version", "read";
 permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
 permission java.util.PropertyPermission "java.vm.specification.name", "read";
 permission java.util.PropertyPermission "java.vm.version", "read";
 permission java.util.PropertyPermission "java.vm.vendor", "read";
 permission java.util.PropertyPermission "java.vm.name", "read";
};

安全检查没有通过,那就会抛出 java.security.AccessControlException 异常。即使安全检查通过了,操作系统的权限检查仍然可能通不过,这时候又会抛出其它类型的异常。

授权规则采用白名单,依据上面的配置意味着启用默认安全策略的 JVM 将无法访问本地文件。如果需要访问本地文件,可以增加下面的规则

permission java.io.FilePermission "/etc/passwd", "read";
permission java.io.FilePermission "/etc/shadow", "read,write";
permission java.io.FilePermission "/xyz", "read,write,delete";
// 允许读所有文件
permission java.io.FilePermission "*", "read";

public FilePermission(String path, String actions) {
  super(path);
  init(getMask(actions));
}

640?wx_fmt=png

其中 AllPermission 表示打开所有权限。还有一个不速之客 HibernatePermission,它并不是内置的权限模块,它是 Hibernate 框架为自己订制的,这意味着安全规则是支持自定义扩展的。扩展也很简单,可以自己编写一个 Permission 子类,实现它的 4 个抽象方法。

abstract class Permission {
  // 权限名称,对于文件来说就是文件名,对于套接字来说就是套接字地址
  // 它的意义是子类可定制的
  private String name;
  // 当前权限对象是否隐含了 other 权限
  // 比如 AllPermission 的这个方法总是返回 true
  public abstract boolean implies(Permission other);
  // equals 和 hashcode 用于权限比较
  public abstract boolean equals(Object obj);
  public abstract int hashCode();
  // 权限选项 read,write,xxx
  public abstract String getActions();
}

class CustomPermission extends Permission {
  private String actions;
  CustomPermission(string name, string actions) {
    super(name)
    this.actions = actions;
  }
  ...
}

class CustomAPI {
  public void someMethod() {
    SecurityManager sec = System.getSecurityManager();
    if(sec != null) {
      sec.CheckPermission(new CustomPermission("xname", "xactions"));
    }
    ...
  }
}

沙箱的安全检查点非常多,下面列举一些常见的场景

  1. 文件操作

  2. 套接字操作

  3. 线程和线程组

  4. 类加载器控制

  5. 反射控制

  6. 线程堆栈信息获取

  7. 网络代理控制

  8. Cookie 读写控制

640?wx_fmt=png

阅读更多精品文章,长按图片识别二维码关注「码洞」

Java安全管理器:沙箱机制与安全策略 本文深入探讨Java安全管理器的原理和应用,分析了其如何在Java语言中建立安全机制,并讨论了与字节码验证器的关系。重点介绍了安全管理器如何决定Java沙箱的参数,并对不同类型的Java应用程序(小程序与应用程序)如何受到不同安全级别的控制进行了阐释。文章通过代码示例和安全策略的讨论,旨在帮助读者更好地理解和运用Java的安全模型。 阅读详情

相关推荐

Java沙箱机制深入解析

本文深入探讨了Java沙箱的核心机制,包括策略文件的结构与编辑方法、默认沙箱的配置以及Java语言自身的安全特性。通过理解Java沙箱如何通过策略文件设置明确的权限集,以及如何通过Java语言的访问控制来保护内存资源,读者可以更好地掌握Java安全模型并评估相关安全风险。

weixin_33608403的博客 519

(十)java.io.File类详解

java.io.File类是文件或路径的抽象表达,它实现了Serializable和Comparable接口,所以支持File对象的持久化,以及文件之间的大小比较。 1.static private FileSystem fs = FileSystem.getFileSystem(); 分析:表示平台本地文件系统的文件系统对象。 2.private static enum PathStat...

OceanSky的专栏 2万+

华为P812E光猫补全shell配置PON口模式

终于看到华为企业级的带2.5电口P812E横空出世了,相信很多发烧友也已经将此收入昂中。相信体验的同时,遇到的第一件事情就是配置PON口模式的问题,本文将带发烧基友解锁模式。

GUAIYU的博客 5741

JVM(3)沙箱安全机制

什么是沙箱? Java安全模型的核心就是Java沙箱(sandbox),什么是沙箱?沙箱是一个限制程序运行的环境。沙箱机制就是将 Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括什么?——CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样。   所有的Java程序运行都可以指定沙箱,可以定制安全策略。 组成沙箱的基本组件: 字节码校验器(b

OVO_LQ_Start的博客 558

【蓝桥杯——单片机学习笔记】十三.点阵(STC15F2K60S2)

一.点阵内部图 点阵的有两种,分为共阴和共阳(与数码管类似,后续代码根据共阳点阵编写)。点阵的控制主要是每行和每列电平的控制。如图,以共阳为例:若要使左上角的灯亮,则第一行输出高电平(其他行均为低电平),第一列输出低电平(其他列均为高电平)。 二.原理图 与数码管共用接口,所以数码管和点阵的显示只能选一个使用! 原理图中点阵的接口R5即代表第5行(Row),C8即代表第8列(Column)。通...

默默无闻小菜鸡的博客 2012

Python的单元测试之unittest

是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。unittest 提供了自动匹配发现并执行测试用例的功能,随着项目代码结构越发庞大,势必有多个测试文件,自动匹配发现并测试用例的功能在此就显得非常有用,只要满足。unittest 提供了丰富的命令行入口,可以根据需要执行某些特定的用例。的测试用例都会被 unittest 发现并执行,测试用例文件的默认匹配规则为 test*.py。

1、测试博主技术知识分享 2、pos行业知识技术分享 3、java后端技术知识分享 4、嵌入式技术知识分享 5、运维部署相关知识分享 283

java安全——Java 默认沙箱

默认沙箱

多头注意力探索Now 3176

快速生成2D卡通人物的AI工具:开启Live2D角色创作的新时代

随着这一创新工具的推出,我们正见证着Live2D角色创作进入了一个全新的阶段。它不仅极大地简化了角色设计的过程,也为广大创作者提供了一种全新的表达方式。对于那些渴望将脑海中的构思迅速转化为现实的人来说,这无疑是一大福音。现在就访问项目主页,开始探索无限可能吧!t=O83A项目主页https://human3daigc.github.io/Textoon_webpage/

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 4839

java冷知识:应用程序安全沙箱

在阅读jdk源码时经常遇到System.getSecurityManager();这样安全检查代码。它保证了jvm所运行程序的完整性,使得jvm不会因为运行有漏洞或恶意的代码而导致出现不可预期的状态。 public class File implements Serializable, Comparable<File>{ public boolean canRead...

布道 8082

GNN(图神经网络)的 MATLAB 仿真

图神经网络(Graph Neural Network, GNN)是一种用于处理图结构数据的深度学习模型。GNN 通过聚合节点及其邻居的信息,能够有效捕捉图结构中的复杂关系,广泛应用于社交网络分析、推荐系统、化学分子分析等领域。GNN 通过消息传递机制聚合节点及其邻居的信息,能够有效处理图结构数据。MATLAB 仿真展示了 GNN 的基本流程和节点分类性能,适用于社交网络分析、推荐系统、化学分子分析和知识图谱等多种应用场景。

走向CTO的路上... 838

汽车电子RTOS--AUTOSAR OS

AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是AUTOSAR(汽车开放系统架构)标准中的一个重要组件,它是一个专门为汽车电子控制单元(ECU)设计的实时操作系统(RTOS)。AUTOSAR OS旨在提供一个标准化的软件平台,以促进不同供应商和汽车制造商之间的组件复用和协同开发,提高软件质量和降低成本。

MHD0815的博客 1800

冷门的 Java 应用程序安全沙箱机制了解一下

如果你经常阅读源码,你会发现 Java 的源码中到处都有类似于下面这一段代码 class File { // 判断一个磁盘文件是否存在 public boolean exists() { SecurityManager security = System.getSecurityManager(); if (security != null) { security...

weixin_34186950的博客 242

IO Virtualization with Virtio.part 2 [十三]

通过对virtio_device_id 中的 device 和 vendor 的值进行比较,我们找到对应的 virtio 驱动,由于这里我们使用 i2c virtio 为例,所以调用 virtio_i2c_probe 进行 virtio i2c 设备的初始化。在和 virtio mmio 设备交互时我们会读取 VIRTIO_MMIO_DEVICE_ID 和 VIRTIO_MMIO_VENDOR_ID,并将其值写入 virtio_device_id 中,这个就会用作后面和 virtio 设备驱动的匹配参数。

cxjczy1990的博客 1212

沙箱安全机制

最新的安全机制实现引入了域(Domain)的概念,虚拟机会把所有代码加载到不同的系统域和应用域,系统域部分专门负责与关键资源进行交互,而各个应用域部分则通过系统域的部分代理来对各种需要的资源进行访问。Java程序可以分为本地代码和远程代码两种,其中本地代码默认被视作可信任的,而远程代码则被视为不可信的。Java沙箱安全机制是一种重要的安全措施,它的核心目的是限制Java代码的运行范围,确保代码被限定在虚拟机(JVM)内特定的运行环境中,并严格限制代码对本地系统资源的访问。

weixin_57091309的博客 403

【保姆级教程】基于UNet++&MobileNetv2的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv2作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

m0_71589036的博客 89

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java的沙箱安全机制

java的沙箱安全机制 转自 “狂神说” 一、介绍 Java安全模型的核心就是java沙箱sandbox,将java代码限定在jvm特定的运行范围中,并严格限制代码对本地系统资源访问,这样来保证代码的有效隔离,防止对本地系统造成破坏。 所有java程序运行都可以指定沙箱,可以定制安全策略。 java将执行程序分成本地代码和远程代码,本地代码默认可信任,远程不受信任。JDK1.0时,非授信的远程代码的安全完全依赖于沙箱机制。 如此严格的安全机制给程序扩展带来障碍,因此后续1.1版本做了改进,增加了安全策略,允

sj8921202的博客 2232

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Jvm沙箱安全机制

简单来说,沙箱安全机制是一种限制 Java 程序执行权限的机制,特别是当程序是从不受信任的来源下载时。它通过限制程序的权限,确保它只能执行受限的操作,无法访问关键的系统资源,比如文件系统、网络或其他敏感数据。沙箱安全机制是 Java 的一项重要功能,特别是在处理来自不受信任来源的代码时,它可以防止恶意代码破坏用户的系统。核心组件:沙箱机制主要通过类加载器安全管理器和权限类实现。简单示例:我们通过代码展示了如何使用来阻止对文件系统的访问,这展示了沙箱机制如何保护系统资源。

weixin_44748929的博客 1055

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java安全模型讲解(沙箱机制)——SecurityManager安全管理器、AccessController访问控制器解析

Java安全模型讲解(沙箱机制)

weixin_40841143的博客 1443

K:java中的安全模型(沙箱机制)

本博文整合自:Java安全——理解Java沙箱、Java 安全模型介绍、Java的沙箱机制原理入门 相关介绍:  我们都知道,程序员编写一个Java程序,默认的情况下可以访问该机器的任意资源,比如读取,删除一些文件或者网络操作等。当你把程序部署到正式的服务器上,系统管理员要为服务器的安全承担责任,那么他可能不敢确定你的程序会不会访问不该访问的资源,为了消除潜在的安全隐患,他可能有两种...

diaosangwan0363的博客 678

JVM-沙箱安全机制

在类加载过程中,JVM会根据一定的规则,优先使用父类加载器来进行类加载,如果父类加载器无法完成类加载任务,则交由其子类加载器来处理。同时,也可以通过限制父类加载器的访问范围,防止恶意代码的注入和执行。例如,在处理未捕获的异常时,JVM会提供默认的异常处理器,用于捕获和处理未处理的异常,以防止恶意代码利用未处理的异常绕过安全控制。1、类加载器隔离(限制):JVM通过使用不同的类加载器来实现不同类之间的隔离,通过这种方式,JVM可以确保来自不受信任来源的类无法访问受保护的类和资源。

weixin_71916648的博客 1101

Java沙箱机制详解

Java沙箱机制是一种核心的安全模型,它通过在受限环境中执行代码来保护系统资源免受潜在恶意代码的侵害。这种机制的核心思想是,限制其对系统关键资源的访问权限。

weixin_37838725的博客 511

沙箱机制

背景:从安全的角度,代码可以分为可信代码(如本地代码)和不可信代码(如第三方插件、网络代码等),为了防止不可信代码对应用的恶意侵犯,Java提供了一套隔离环境用于限制不可信代码对本地系统的资源访问,这种机制叫“沙箱机制”,如下图所示。     基本组件 类加载器(用户可定制) Class文件检验器 内置于Java 虚拟机的安全特性 安全管理器及Java API(用户可定制) 类加载器 引入“命名空

04stone37 853
上一篇: 推荐几个牛叉技术大神的高质量免费技术专栏,码洞垫底
下一篇: 打通 Java 任督二脉 —— 并发数据结构的基石
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值