JDK

fastjson安全漏洞浅析

落爺英雄遲暮 提交于 2020-12-26 18:34:32
No.1 声明 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。 No.2 前言 Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。 No.3 第一版 fastjson版本:1.2.22-1.2.24 这些版本的fastjson未对@type中加载进的类进行过滤,导致的这一版漏洞。(后面有具体调试,以基于rmi+远程加载类的POC为例) 针对的类是JdbcRowSetImpl类和特殊类TemplatesImpl。由于jdk版本的一些限制,需要使用多种姿势绕过,但是关于fastjson的基础原理都是一样的。 POC有以下几种: 基于rmi+远程加载类 基于ldap+远程加载类 基于rmi+BeanFactory类 基于ldap+jndi 基于特殊类 基于rmi+远程加载类

com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver

左心房为你撑大大i 提交于 2020-12-26 15:08:54
一、 MySQL Connector / J 概述 1. MySQL Connector / J MySQL通过MySQL Connector / J为使用Java编程语言开发的客户端应用程序提供连接。Connector / J实现了 Java数据库连接(JDBC)API以及它的许多增值扩展。它还支持新的X DevAPI。 MySQL Connector / J是JDBC Type 4驱动程序,实现了 JDBC 4.2规范。Type 4表示驱动程序是MySQL协议的纯Java实现,并且不依赖MySQL客户端库。有关兼容性的信息,请参见下表 连接器/ J版本以及它们要求的MySQL和Java版本。 对于使用通用数据访问设计模式的大型程序,请考虑使用流行的持久性框架之一,例如Hibernate, Spring的JDBC模板或MyBatis SQL Maps,以减少用于调试,调整,保护和维护的JDBC代码量。保持。 Connector / J版本 JDBC版本 MySQL服务器版本 JRE版本 JDK版本 状态 8.0 4.2 5.6、5.7、8.0 JRE 8或更高 JDK 8.0或更高版本 推荐版本 5.1 3.0、4.0、4.1、4.2 5.6、5.7、8.0 JRE 5或更高 JDK 5.0和JDK 8.0或更高版本 一般可用性 2. mysql-connector-java

java学习lesson 01

ε祈祈猫儿з 提交于 2020-12-26 11:44:58
Java语言平台: * JSE 开发普通桌面和商务应用程序,该技术体系是其他两者的基础, * JME 开发电子消费产品和嵌入式设备 * JEE 开发企业环境下的应用程序 。 Java语言特点 * 面向对象; * 开源; * 跨平台:Java的跨平台并不是真正的的跨平台,而是java本身采用的是半解释、半编译的方 法,并定义了Java虚拟机(JVM)的概念。Java源代码先经过Java编译器(javac) 产生出字节码,再将字节码加载到JVM执行。对于不同的操作系统内嵌入了对应的 JVM,JVM会屏蔽底层硬件和操作系统的差异,从而实现Java语言的跨平台 。 开发环境准备: JDK的安装: 官网 http://www.oracle.com ; 双击安装程序。 注意事项: * 安装路径不要有中文或者特殊符号如空格等; * 所有和开发相关的软件最好安装目录统一。 验证安装是否成功 * 通过DOS命令,切换到JDK安装的bin目录下;然后分别输入javac和java,如果正 常显示一些内容,说明安装成功。 配置环境变量 1、右键点击桌面计算机→选择属性→高级系统设置→高级选项卡→点击环境 变量→下方系统变量中查找path→双击path→将jdk安装目录下的bin目录添加到 最左边并添加分号 。 2、 先配置JAVA_HOME;再修改path HelloWorld编写和运行 注释:

原来是这个导致 java 代码的运行效率low到爆了

谁都会走 提交于 2020-12-26 08:01:08
代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。 代码优化的目标是 减小代码的体积 提高代码运行的效率 代码优化细节 1、尽量指定类、方法的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。 此举能够使性能平均提高50% 。 2、尽量重用对象 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。 3、尽可能使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变量,如静态变量

maven

眉间皱痕 提交于 2020-12-25 18:52:47
Settings.xml配置文件详解 maven默认的settings.xml是一个包含注释和例子的模板,可以快速的修改settings.xml文件 maven安装后不会在用户目录下自动生成settings.xml,一般是将/maven/conf下的settings.xml文件拷贝过去进行相应的修 <? xml version="1.0" encoding="UTF-8" ?> < settings xmlns ="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" >   <!-- 本地仓库的路径,默认值是~/.m2/repository -->  <localRepository>/path/to/local/repo</localRepository> <!-- maven是否需要和用户交互,默认值是true --> < interactiveMode >true</ interactiveMode >  <!--

[从今天开始修炼数据结构]队列、循环队列、PriorityQueue的原理及实现

删除回忆录丶 提交于 2020-12-25 18:13:48
[从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈、斐波那契数列、逆波兰四则运算的实现 [从今天开始修炼数据结构]队列、循环队列、PriorityQueue的原理及实现 一、什么是队列   队列queue是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。   队列是先进先出的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。如下图所示      例如聊天室消息发送就是队列形式,先发出去的消息会先显示,后发的会后显示。 二、队列的抽象数据类型   队列的抽象数据类型与线性表的基本相同,只不过插入删除的位置有限制。 ADT Queue Data 同线性表,相邻的元素具有前驱后继关系 Operation InitQueue( * Q):初始化操作 DestroyQueue( * Q):若队列Q存在,销毁他 ClearQueue( * Q):将队列Q清空 QueueEmpty(Q):若队列Q为空,返回true,否则返回false GetHead(Q, * e):若Q存在且非空,用e返回队首元素 EnQueue( * Q,e):若Q存在,插入新元素e到队尾 DeQueue( *Q,* e):删除Q中的队首元素,并用e返回其值

JVM 相关

◇◆丶佛笑我妖孽 提交于 2020-12-25 18:01:02
什么是 WhiteBox API WhiteBox API 是 HotSpot VM 自带的白盒测试工具,将内部的很多核心机制的 API 暴露出来,用于白盒测试 JVM,压测 JVM 特性,以及辅助学习理解 JVM 并调优参数。WhiteBox API 是 Java 7 引入的,目前 Java 8 LTS 以及 Java 11 LTS(其实是 Java 9+ 以后的所有版本,这里只关心 LTS 版本,Java 9 引入了模块化所以 WhiteBox API 有所变化)都是有的。但是默认这个 API 并没有编译在 JDK 之中,但是他的实现是编译在了 JDK 里面了。所以如果想用这个 API,需要用户自己编译需要的 API,并加入 Java 的 BootClassPath 并启用 WhiteBox API。 WhiteBox API 如何实现的 WhiteBox API 是一个 Java 类, 位于 JDK 的测试包中,默认没有编译进标准发行版的 JDK 中 。 test/lib/sun/hotspot/WhiteBox.java package sun.hotspot; public class WhiteBox { //仅举两个例子,省略其他 api 以及代码 // Force Young GC public native void youngGC(); // Force

JVM(java 虚拟机)

生来就可爱ヽ(ⅴ<●) 提交于 2020-12-25 03:27:01
JVM(java 虚拟机) 一.JVM简介 1.JVM:Java Virtual Machine (java 虚拟机) 通过软件来模拟出来的具有完整的硬件系统功能、运行在完全隔离的环境中的完整的计算机系统。 2.种类: 1)Sun Classic 经典款 2)Exact VM 准确式内存管理 3)Sun HotSpot VM 热代码跟踪 二.JVM运行时的区域 1.运行时的区域 2.线程隔离区域(程序计数器、java栈) 程序计数器:是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,所以程序计数器这类内存区域为“线程私有的内 如果线程正在执行的是Native方法,这个计数器的值为空。 3.java 栈 执行代码的内存区域,比如执行方法,变量,引用等。包括:java虚拟机栈、本地方法栈;他们作用相似,区别只是:虚拟机栈为虚拟机执行java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。 栈里存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long

一次线上内存溢出的排查

女生的网名这么多〃 提交于 2020-12-24 19:33:31
点击上方“ 程序员小灰 ”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 你假笨 或许大家曾经都碰到过HashMap因为其非线程安全的多线程并发操作导致cpu飙高的问题,不过这个问题在JDK8里已经解决掉了,其根本原因网上也早已遍地开花,所以我这篇文章里就不再熬述了,不了解的可以去网上找找相关文章,本文和大家聊的是看到的另外一个现象——内存溢出。 现象 同事丢了一个链接过来,是内存分析的,我看到一个线程占用的内存非常高,这个问题其实已然非常明显了,展开看了下线程栈: 正在调用一个Map对象的toString方法,直到抛出 java.lang.OutOfMemoryError ,之所以这个栈顶能看到OutOfMemoryError的逻辑是因为配置了 -XX:+HeapDumpOnOutOfMemoryError 参数。 这个参数的官方说明如下: 不过这个参数只会生效一次,不会每次OOM的时候都做内存dump,大家可以想像一下,如果是代码的问题会发生连续的OOM,那连续做dump也没必要,于是JVM里控制这个参数只会在第一次发生OOM的时候做一次内存dump。 分析 其实在我看到这个OutOfMemoryError栈之后,还没等同事说多少话,我就立马要同事去看我之前那篇关于OOM的文章了,想表达的是虽然这个线程栈里看到了OOM

mac下jdk1.8安装后的目录

僤鯓⒐⒋嵵緔 提交于 2020-12-24 13:44:40
1)安装文件 2)查看安装的目录 ​ ➜ jdk1.8.0_181.jdk pwd /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk ​ 3)如果查找不到的话,就拖到左边 注意:直接点击dmg安装的,直接java -version是可以识别的,说明已经添加到环境变量下 来源: oschina 链接: https://my.oschina.net/u/4360480/blog/4837192