Java安全——语言安全结构

news2024/11/15 7:47:00

Java安全

Java语言安全

Java语言安全结构

  • 面向对象的一个设计突出点就是允许数据的隐藏和数据的封装。
  • 数据封装确定了数据的访问只能通过公共接口访问操作。而一般的操作是直接管理对象的数据元素。
  • 对于开发大型的,健壮性的面向对象的系统的重要性。
java实体的访问级别
  1. public:公共的访问级别,所有的类、接口、枚举都可以访问。也就是说,如果将一个实体设为public,那么所有其他类都可以访问它。
  2. protected:保护的访问级别,只有当前类、同一包中的类和子类可以访问。如果将一个属性或方法设置为protected,则只有在当前类、同一包中的类和子类中才能访问它。
  3. 默认访问级别:默认访问级别是指如果没有设置任何修饰符,那么该实体的访问级别就为默认访问级别。默认访问级别只允许当前包中的类访问。
  4. private:私有的访问级别,只有当前类能够访问。如果你想要一个属性或方法只在当前类中使用,那么就可以将其设置为private访问级别。

总之,访问级别设置是Java中非常重要的一个概念,能够限制实体的访问范围,确保代码的安全性和可维护性。需要在设计程序时合理地运用访问级别设置。

确保内存访问对象的访问权限的限制和这些实体不应该被破坏
  • 必须严格遵循访问方法的要求

    • 不能任意处理私有实体,必须更具程序指定的访问级别进行操作
    • 编译器错误和序列化错误
  • 程序不能访问任意的内存地址

    • java中没有指针的概念
  • 不能对已经被声明为final的实体进行改动

    • final修改在运行时的可能?
  • 变量在初始化之前不能使用

    • 初始化是为了防止通过该手段非法访问内存
    • 实例变量一般初始化默认值
  • 对于所有的数组访问都必须进行越界检查(bound check)

    • 尽可能减少程序的错误,更健壮
    • 在安全方面带来的好处
      • 在内存中如果一个整形数组后紧接着存储的是一个串(字符数组),那么只要对整形数字的写操作越界,则可以修改串的值,覆盖传的开始位置,如果紧邻内存的话
  • 对象不能任意强制转换为其他类型的对象(没有继承关系的)

    • java技术保证只有获得访问权限才能对内存进行读写
    • 在这里插入图片描述
对象序列化和内存完整性

关于保护型访问,在java中还有一个例外——对象序列化

  • 对象序列化是将一个对象以字节为单位的方式转换,当在其他地方用到时可以将字节转换成指定的对象,并且保有对象的状态。
  • 用途
    • RMI过程中的对象传输(客户端和服务端的对象交换)
    • 可将对象序列化后保存到磁盘上
  • 对象序列化API可以访问私有保护的对象,从而保证对象状态能够正确的得以保存和恢复
  • 在重建序列化对象的时候,还可以将这些值还原给私有保护的变量进行数据赋值

Java语言规则的实施

编译的实施
字节码校验器

Java字节码校验器是Java虚拟机中的一个子系统,用于验证Java字节码是否具有正确的格式和含义。Java字节码校验器主要由以下两个部分组成:

  1. 类文件验证器:用于验证Java类文件是否符合Java字节码的格式和规范,例如检查字节码的魔数、版本号、常量池、字段、方法等信息是否完整、合法和正确。
  2. 字节码验证器:用于验证Java字节码是否符合Java虚拟机的语义规范,例如检查变量是否被初始化、操作数类型是否正确、分支跳转是否正确等。

Java字节码校验器的内部组成如下:

  1. 解析器:用于解析Java字节码文件,并将其转化为内存中的Java类模型。
  2. 符号表:用于存储在字节码中所使用的变量、常量、方法等的相关信息。
  3. 数据流分析器:用于分析类文件中的字节码的执行流程,并检查这些字节码的操作是否符合Java虚拟机的规范。
  4. 操作数栈:用于存储在Java字节码中的操作数。
  5. 运行时常量池:用于存储Java字节码中的常量,以及常量池中的运行时信息。
  6. 类型检查器:用于验证Java字节码中的类型是否正确,以及类型转换和自动装箱、拆箱是否符合Java虚拟机的规范。

Java字节码校验器的主要原理是基于数据流分析,通过对程序代码进行解析、检查和验证等操作,确定程序的正确性、安全性和可靠性。Java字节码校验器可以帮助开发人员捕获和避免程序中的潜在错误和安全隐患,提高程序的健壮性和安全性。

在这里插入图片描述

字节码校验器的内部组成
  • 是java虚拟机的一个内部组成部分,没有任何接口,程序员也无法直接与其交互或者访问
  • 当虚拟机的类加载器将字节码校验器内建到类对象中时,字节码校验器就自动完成了对大部分字节码的检查
  • 字节码校验器通常被认为是一个小型的定理证明(theorem prover),通过执行该段代码证明给定的字节码是这一组合法的指令
推迟的字节码校验

exam 检查一些字节码的正确性之后等待推迟的字节码检验(verify)

Java字节码校验器中的推迟字节码校验(Lazy Bytecode Verification)是一种Java虚拟机优化技术。当Java虚拟机加载一个类文件时,它会将类文件读入内存并放入方法区,然后依次进行类加载、连接和初始化等过程。在类连接过程中,Java虚拟机会对类文件进行字节码校验,以确保类文件的正确性和安全性。但是,在某些情况下,Java虚拟机可能会推迟对字节码的校验,以提高类文件的加载性能。

具体来说,Java虚拟机在特定情况下会对字节码的校验进行推迟,而不是在类加载和连接过程中立即对字节码进行校验。Java虚拟机会从未验证的代码中选取一部分代码,以未经过校验的方式运行它们。如果这些代码成功执行,那么Java虚拟机就推定这些代码是可靠的,并在运行时保留它们;如果这些代码执行出现异常,那么Java虚拟机就会在运行时将它们标记为“不可靠代码”,并要求程序员对这些代码进行调试和验证。

Java字节码校验器中的推迟字节码校验技术可以提高Java类文件的加载性能,减少字节码校验所需的时间,同时也能够动态地适应程序执行环境,保证程序的稳定和安全性。但是,它也会带来一些不确定性和风险,因为不被立即校验的代码可能存在一些不可预测的错误和漏洞,这对程序的稳定性和安全性会带来潜在的威胁。因此,在实际应用中,需要按照场景和需求来选择是否开启推迟字节码校验功能,以确保程序的可靠性和安全性。

运行时的规则实施
  • 数组越界检查

    • 字节码检查器检查
    • 运行时检查
  • 对象类型转换

    • 检查转换是否合法

Java运行时的规则是基于Java虚拟机规范(Java Virtual Machine
Specification)实施的,该规范定义了Java虚拟机(Java Virtual
Machine,JVM)的行为和执行Java程序的方法。以下是Java运行时的规则实施的一些说明:

Java程序的运行依赖于Java虚拟机,而不是底层操作系统和硬件平台。这意味着Java程序可以在不同的操作系统和硬件平台上运行,只需要在各个平台上安装适当的JVM即可。

在Java程序执行之前,Java源代码需要经过编译器转换为Java字节码(Java
bytecode),然后再被送到JVM执行。Java字节码是一种中间格式,它包含了Java程序的执行逻辑和指令序列。

JVM在执行Java程序时会按照Java字节码中的指令序列逐步执行,直到程序结束或遇到异常情况。在执行过程中,JVM负责管理Java程序的内存分配、对象创建和释放、线程管理、异常处理等任务。

Java程序的性能和可靠性受到JVM的影响,因此JVM的实现对Java程序的运行效率和稳定性至关重要。不同的JVM实现可能会有不同的性能和特性,需要根据具体要求进行选择。

Java运行时的安全性是Java平台的一大优势。Java程序在执行时受到严格的安全限制和控制,可以防止恶意代码的执行、数据泄漏等安全问题。同时,Java平台还提供了许多安全特性和工具,如安全管理器、安全策略、数字证书等,使得Java程序可以在安全的环境中运行。

语言层面的安全结构设计

Java语言在安全结构设计方面有以下特点和机制:

  1. 安全管理器(Security Manager):Java提供了一个安全管理器,用于管理和控制Java程序的安全访问。安全管理器负责对Java程序的各种操作(如文件读写、网络访问等)进行权限控制和限制,以保护系统免受恶意代码的攻击。

  2. 安全策略文件(Policy File):Java使用安全策略文件来定义和配置安全权限。策略文件指定了哪些代码可以执行哪些操作,可以限制访问敏感资源或者限制对某些功能的使用。

  3. 访问控制:Java通过访问控制机制来限制代码对敏感资源的访问。通过使用访问修饰符(如private、protected、public)和访问控制关键字(如final、static),可以控制类、方法和变量的可见性和访问权限。

  4. 异常处理:Java的异常处理机制可以帮助程序在出现异常情况时进行安全处理。通过捕获和处理异常,可以防止程序崩溃或泄露敏感信息。

  5. 加密和安全通信:Java提供了丰富的加密和安全通信的API,如Java Cryptography Architecture(JCA)和Java Secure Socket Extension(JSSE)。这些API可以用于实现数据加密、数字签名、身份验证等安全功能。

  6. 类加载器(ClassLoader):Java的类加载器机制可以帮助保护系统免受恶意代码的攻击。类加载器可以限制代码的访问权限,防止恶意代码加载和执行。

  7. 安全性注解(Security Annotations):Java提供了一些安全性注解,可以在代码中标记敏感操作或资源,以便进行更细粒度的安全控制和验证。

simply put

Java language has several security mechanisms and features at its core for designing secure applications. Here are some key points:

  1. Security Manager: Java provides a Security Manager that controls and manages the security policies of Java applications. It enforces restrictions on various operations performed by the application, such as file access, network communication, and system properties access, to protect against malicious activities.

  2. Policy File: Java uses a policy file to define and configure security permissions. The policy file specifies which code is allowed to perform specific actions, restricting access to sensitive resources or functionalities.

  3. Access Control: Java employs access control mechanisms to restrict access to sensitive resources. Access modifiers (e.g., private, protected, public) and access control keywords (e.g., final, static) are used to control the visibility and accessibility of classes, methods, and variables.

  4. Exception Handling: Java’s exception handling mechanism aids in secure application design. By catching and handling exceptions appropriately, it prevents program crashes and leakage of sensitive information.

  5. Encryption and Secure Communication: Java provides robust APIs for encryption, digital signatures, and secure communication through Java Cryptography Architecture (JCA) and Java Secure Socket Extension (JSSE). These APIs enable the implementation of secure data transmission, authentication, and integrity checks.

  6. Class Loader: Java’s class loader mechanism helps protect against malicious code execution. Class loaders can restrict code access and prevent the loading and execution of malicious classes.

  7. Security Annotations: Java offers security annotations that allow developers to mark sensitive operations or resources within the code. These annotations enable more fine-grained security control and validation.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下std::ifstream成员函数对应系统调用验证

最近在分析离线数据使用时的bug&#xff0c;发现代码中对std::ifstream成员函数使用存在疑问&#xff0c;所以就写了个简单测试程序来分析std::ifstream成员函数对应那些系统调用。 目录 1.gcount 2.seekg和tellg 3.read 代码如下&#xff1a; test.cpp #include <ios…

python中如何使用正则表达式提取数据

这篇文章主要介绍了python中如何使用正则表达式提取数据问题。具有很好的参考价值&#xff0c;希望对大家有所帮助。如有错误或未考虑完全的地方&#xff0c;望不吝赐教。 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 re…

mac m4a转mp3怎么转?

mac m4a转mp3怎么操作&#xff1f;小编之前编写了在windows系统电脑上进行音频格式转换的教程和方法&#xff0c;帮助了不少的小伙伴。最近有一个粉丝朋友向我求助&#xff0c;因为自己使用的是苹果mac电脑&#xff0c;有没有什么方法可以在上面将m4a音频格式转换成mp3。因为使…

从加密转型AI:追求可持续性发展还是盲目跟风?

很多批评者曾说&#xff0c;加密行业充斥着流行语&#xff0c;总是在追逐下一个新趋势&#xff0c;甚至会因为过度追求短期利润而忽视了可持续性发展的重要性。在大多数情况下&#xff0c;他们似乎是对的。 上周末&#xff0c;国内最早也是最大的比特币论坛巴比特宣布转型AI赛道…

ClickHouse单节点安装配置

创建目录 mkdir /opt/clickhouse 将文件复制到目录 cp /opt/clickhouse-*.rpm /opt/module/clickhouse/ 在/clickhouse目录下解压安装文件 rpm2cpio clickhouse-client-21.7.3.14-2.noarch.rpm | cpio -idmv rpm2cpio clickhouse-common-static-21.7.3.14-2.x86_64.rpm | …

OpenCV学习笔记 | 边缘检测Canny算法复现 | Python

摘要 OpenCV中的边缘检测是指在图像中检测出明显的边缘轮廓线&#xff0c;可以通过计算图像中每个像素的梯度来实现。Canny算法是一种常用的边缘检测算法&#xff0c;它主要通过连续的操作来寻找边缘&#xff0c;包括对图像去噪、计算图像梯度、非极大值抑制和双阈值处理等步骤…

第36节:cesium 下雨效果(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><!

[ JVM ] 常用参数 优化参考

基础概念回顾 JDK、JRE、JVM的关系&#xff08;JDK>JRE>JVM&#xff09; JDK JRE 开发工具 、JRE JVM 类库&#xff0c;具体关系如下图&#xff1a; JDK&#xff08;Java Development Kit&#xff09; 用于开发 Java 应用程序的软件开发工具集合&#xff0c;包括 了 …

【接口mock工具】推荐一个好用的api接口关联,接口mock,文档管理的工具-yapi

【接口mock工具】推荐一个好用的api接口关联&#xff0c;接口mock&#xff0c;文档管理的工具-yapi 能满足的功能 &#xff1a; 1. 接口mock 2. 接口文档生成 3. 接口自动化测试 4. 接口自动化测试结果可以发送到你的企业微信上面 5. 接口管理可以按照分组&#xff0c;分项…

python数据分析之利用多种机器学习方法实现文本分类、情感预测

大家好&#xff0c;我是带我去滑雪&#xff01; 文本分类是一种机器学习和自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;旨在将给定的文本数据分配到预定义的类别或标签中。其目标是为文本数据提供自动分类和标注&#xff0c;使得可以根据其内容或主题进行组织、排…

初见RNN(第七次组会)

初见RNN&#xff08;第七次组会&#xff09; 序列模型、马尔可夫假设循环神经网络 序列模型、马尔可夫假设 循环神经网络

[rocketmq] 浅谈结构

rocketmq 结构 NameServer &#xff1a;几乎是无状态节点&#xff0c;可横向扩展&#xff0c;节点之间无消息同步&#xff0c;主要负责对源数据的管理&#xff0c;包括对于Topic和路由信息的管理。 每个 Broker 在启动的时候会到 NameServer 注册&#xff0c;Producer 在发送消…

【UEFI实战】UEFI图形显示(从像素到字符)

GraphicsConsoleDxe 在【UEFI实战】UEFI图形显示&#xff08;显示驱动&#xff09;中已经介绍了如何使用显卡驱动安装的GOP来进行像素级别的显示&#xff0c;本文介绍的内容是对像素的包装&#xff0c;最终变成普通字符的输出。 模块简述 本模块将原本的GOP包装成了字符输出…

MySQL数据库——主从复制优化及读写分离

目录 主从复制优化主服务器配置优化redo log&#xff08;事务日志&#xff09;的刷盘策略从服务器配置优化 搭建MySQL读写分离 主从复制优化 主服务器配置优化 vim /etc/my.cnf expire_logs_days7 #设置二进制日志文件过期时间&#xff0c;默认值为0&#xff0c;表示logs不…

Vue2生命周期

Vue2生命周期 1、概念2、生命周期过程2.1 流程图示2.2 三阶段 3、钩子函数详解3.1 beforeCreate() 创建前3.2 created()创建后3.3 beforeMount() 挂载前3.4 mounted()挂载完成3.5 beforeUpdate() 更新前3.6 updated() 更新后3.7 beforeDestroy() 销毁前3.8 destroyed() 销毁完成…

在群晖上安装运行Airflow

本文是应网友 &#xff1a; 要求折腾的&#xff1b; 什么是 Airflow &#xff1f; Apache Airflow 是一个开源平台&#xff0c;用于开发、调度和监控面向批处理的工作流。Airflow 的可扩展 Python 框架使您能够构建与几乎任何技术连接的工作流。Web 界面有助于管理工作流程的状…

RabbitMQ灵活运用,怎么理解五种消息模型

RabbitMQ灵活运用&#xff0c;怎么理解五种消息模型 简介一、AMQP协议二、交换机类型与默认交换机1. 交换机的四种类型2. 默认交换机 三、五种模式速览1. 一对一简单模式2. work模式&#xff08;轮询&#xff09;3. 发布/订阅模式4. 路由模式&#xff08;自称direct模式&#x…

Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能

一.背景 由于最近的项目需要开启无障碍功能然后实现对应的功能需求,但是由于需求是需要安装后就开启辅助功能,不要在繁琐的在设置中开启辅助功能,所以需要如何在应用中开启辅助功能。 二.前提条件 将普通应用转换成系统应用,然后将系统的framework.jar包放到应用中并且可以…

vscode配置task.json和launch.json启动调试

首先说一下参考博文&#xff1a; 文章标题“VScode 调试教程 tasks.json和launch.json的设置&#xff08;超详细&#xff09;” 地址&#xff1a;https://blog.csdn.net/qq_59084325/article/details/125662393 官方文档太官方&#xff0c;其他人的文档也看过&#xff0c;单独…

微信小程序浏览docx,pdf等文件在线预览使用wx.openDocument

wx.downloadFile({ url: fileUrl,//pdf链接success(res) {wx.openDocument({ //打开文档filePath: res.tempFilePath,fileType: "pdf",//文档类型showMenu: true,success: function (res) {wx.showToast({title: 打开文档成功,})},fail: function (res) {wx.showToas…