-
java安全编码指南之:字符串和编码
所属栏目:[大数据] 日期:2021-05-21 热度:102
目录 简介 使用变长编码的不完全字符来创建字符串 char不能表示所有的Unicode 注意Locale的使用 文件读写中的编码格式 不要将非字符数据编码为字符串 简介 字符串是我们日常编码过程中使用到最多的java类型了。全球各个地区的语言不同,即使使用了Unicode也[详细]
-
java安全编码指南之:锁的双重检测
所属栏目:[大数据] 日期:2021-05-21 热度:89
目录 简介 单例模式的延迟加载 double check模式 静态域的实现 ThreadLocal版本 简介 双重检测锁定模式是一种设计模式,我们通过首次检测锁定条件而不是实际获得锁从而减少获取锁的开销。 双重检查锁定模式用法通常用于实现执行延迟初始化的单例工厂模式。延[详细]
-
java安全编码指南之:异常处理
所属栏目:[大数据] 日期:2021-05-21 热度:65
目录 简介 异常简介 不要忽略checked exceptions 不要在异常中暴露敏感信息 在处理捕获的异常时,需要恢复对象的初始状态 不要手动完成finally block 不要捕获NullPointerException和它的父类异常 不要throw RuntimeException,Exception,or Throwable 不要抛[详细]
-
java安全编码指南之:输入注入injection
所属栏目:[大数据] 日期:2021-05-21 热度:189
目录 简介 SQL注入 java中的SQL注入 使用PreparedStatement XML中的SQL注入 XML注入的java代码 简介 注入问题是安全中一个非常常见的问题,今天我们来探讨一下java中的sql注入和XML注入的防范。 sql注入 什么是sql注入呢? sql注入的意思是,用户输入了某些[详细]
-
java安全编码指南之:输入校验
所属栏目:[大数据] 日期:2021-05-21 热度:175
目录 简介 在字符串标准化之后进行校验 注意不可信字符串的格式化 小心使用Runtime.exec() 正则表达式的匹配 简介 为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要对所有的用户输入都进行一定程度的校验。 本文将带领[详细]
-
java安全编码指南之:堆污染Heap pollution
所属栏目:[大数据] 日期:2021-05-21 热度:128
目录 简介 产生堆污染的例子 更通用的例子 可变参数 简介 什么是堆污染呢?堆污染是指当参数化类型变量引用的对象不是该参数化类型的对象时而发生的。 我们知道在JDK5中,引入了泛型的概念,我们可以在创建集合类的时候,指定该集合类中应该存储的对象类型。[详细]
-
java安全编码指南之:序列化Serialization
所属栏目:[大数据] 日期:2021-05-21 热度:55
目录 简介 序列化简介 注意serialVersionUID writeObject和readObject readResolve和writeReplace 不要序列化内部类 如果类中有自定义变量,那么不要使用默认的序列化 不要在readObject中调用可重写的方法 简介 序列化是java中一个非常常用又会被人忽视的功[详细]
-
java安全编码指南之:文件IO操作
所属栏目:[大数据] 日期:2021-05-21 热度:106
目录 简介 创建文件的时候指定合适的权限 注意检查文件操作的返回值 删除使用过后的临时文件 释放不再被使用的资源 注意Buffer的安全性 注意 Process 的标准输入输出 InputStream.read() 和 Reader.read() write() 方法不要超出范围 注意带数组的read的使用[详细]
-
JDK8中的新时间API:Duration Period和ChronoUnit介绍
所属栏目:[大数据] 日期:2021-05-21 热度:123
目录 简介 Duration Period ChronoUnit 简介 在JDK8中,引入了三个非常有用的时间相关的API:Duration,Period和ChronoUnit。 他们都是用来对时间进行统计的,本文将会详细讲解一下这三个API的使用。 Duration Duration主要用来衡量秒级和纳秒级的时间,使用[详细]
-
java安全编码指南之:可见性和原子性
所属栏目:[大数据] 日期:2021-05-21 热度:102
目录 简介 不可变对象的可见性 保证共享变量的复合操作的原子性 保证多个Atomic原子类操作的原子性 保证方法调用链的原子性 读写64bits的值 简介 java类中会定义很多变量,有类变量也有实例变量,这些变量在访问的过程中,会遇到一些可见性和原子性的问题。[详细]
-
java安全编码指南之:ThreadPool的使用
所属栏目:[大数据] 日期:2021-05-21 热度:197
目录 简介 java自带的线程池 提交给线程池的线程要是可以被中断的 正确处理线程池中线程的异常 线程池中使用ThreadLocal一定要注意清理 简介 在java中,除了单个使用Thread之外,我们还会使用到ThreadPool来构建线程池,那么在使用线程池的过程中需要注意哪[详细]
-
java安全编码指南之:文件和共享目录的安全性
所属栏目:[大数据] 日期:2021-05-21 热度:196
目录 简介 linux下的文件基本权限 linux文件的特殊权限 Set UID 和 Set GID Sticky Bit SUID/SGID/SBIT权限设置 文件隐藏属性 特殊文件 java中在共享目录中使用文件要注意的问题 安全目录 简介 java程序是跨平台的,可以运行在windows也可以运行在linux。但[详细]
-
java安全编码指南之:方法编写指南
所属栏目:[大数据] 日期:2021-05-21 热度:93
目录 简介 不要在构造函数中调用可以被重写的方法 不要在clone()方法中调用可重写的方法 重写equals()方法 hashCode和equals compareTo方法的实现 简介 java程序的逻辑是由一个个的方法组成的,而在编写方法的过程中,我们也需要遵守一定的安全规则,比如方[详细]
-
java安全编码指南之:线程安全规则
所属栏目:[大数据] 日期:2021-05-21 热度:64
目录 简介 注意线程安全方法的重写 构造函数中this的溢出 不要在类初始化的时候使用后台线程 简介 如果我们在多线程中引入了共享变量,那么我们就需要考虑一下多线程下线程安全的问题了。那么我们在编写代码的过程中,需要注意哪些线程安全的问题呢? 一起来[详细]
-
java安全编码指南之:敏感类的拷贝
所属栏目:[大数据] 日期:2021-05-21 热度:89
目录 简介 一个简单的SensitiveObject SensitiveObject的限制 对SensitiveObject的攻击 解决办法 简介 一般来说class中如果包含了私有的或者敏感的数据的时候是不允许被拷贝的。 如果一个class不想被拷贝,我们是不是不提供拷贝的方法就能保证class的安全了[详细]
-
troubleshoot之:分析OutOfMemoryError异常
所属栏目:[大数据] 日期:2021-05-21 热度:147
目录 简介 OutOfMemoryError java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: GC Overhead limit exceeded java.lang.OutOfMemoryError: Requested array size exceeds VM limit java.lang.OutOfMemoryError: Metaspace java.lang[详细]
-
java安全编码指南之:Mutability可变性
所属栏目:[大数据] 日期:2021-05-21 热度:110
目录 简介 可变对象和不可变对象 创建mutable对象的拷贝 为mutable类创建copy方法 不要相信equals 不要直接暴露可修改的属性 public static fields应该被置位final public static final field 应该是不可变的 简介 mutable(可变)和immutable(不可变)对象[详细]
-
troubleshoot之:使用JFR分析性能问题
所属栏目:[大数据] 日期:2021-05-21 热度:188
目录 简介 GC性能事件 同步性能 IO性能 代码执行的性能 其他有用的event 简介 java程序的性能问题分析是一个很困难的问题。尤其是对于一个非常复杂的程序来说,分析起来更是头疼。 还好JVM引入了JFR,可以通过JFR来监控和分析JVM的各种事件。通过这些事件的[详细]
-
java安全编码指南之:Number操作
所属栏目:[大数据] 日期:2021-05-21 热度:133
目录 简介 Number的范围 区分位运算和算数运算 注意不要使用0作为除数 兼容C++的无符号整数类型 NAN和INFINITY 不要使用float或者double作为循环的计数器 BigDecimal的构建 类型转换问题 简介 java中可以被称为Number的有byte,short,int,long,float,dou[详细]
-
troubleshoot之:GC调优到底是什么
所属栏目:[大数据] 日期:2021-05-21 热度:133
目录 简介 那些GC的默认值 GC的选择 GC的最大线程个数 初始化heap size 最大的heap size 分层编译技术 我们到底要什么 最大暂停时间 吞吐率 简介 我们经常会听到甚至需要自己动手去做GC调优。那么GC调优的目的到底是什么呢?让程序跑得更快?让GC消耗更少的[详细]
-
巧用HashMap一行代码统计单词出现次数
所属栏目:[大数据] 日期:2021-05-21 热度:109
简介 JDK是在一直在迭代更新的,很多我们熟悉的类也悄悄的添加了一些新的方法特性。比如我们最常用的HashMap。 今天给大家讲一下HashMap在JDK8中添加的两个新方法compute和merge,从而实现一行代码实现单词统计的功能。一起来看看吧。 爱在JDK8之前 JDK8为我[详细]
-
java安全编码指南之:基础篇
所属栏目:[大数据] 日期:2021-05-21 热度:131
目录 简介 java平台本身的安全性 安全第一,不要写聪明的代码 在代码设计之初就考虑安全性 避免重复的代码 限制权限 构建可信边界 封装 写文档 简介 作为一个程序员,只是写出好用的代码是不够的,我们还需要考虑到程序的安全性。在这个不能跟陌生人说话世界[详细]
-
java安全编码指南之:声明和初始化
所属栏目:[大数据] 日期:2021-05-21 热度:192
目录 简介 初始化顺序 循环初始化 不要使用java标准库中的类名作为自己的类名 不要在增强的for语句中修改变量值 简介 在java对象和字段的初始化过程中会遇到哪些安全性问题呢?一起来看看吧。 初始化顺序 根据JLS(Java Language Specification)中的定义,c[详细]
-
troubleshoot之:使用JFR解决内存泄露
所属栏目:[大数据] 日期:2021-05-21 热度:196
目录 简介 一个内存泄露的例子 使用JFR和JMC来分析内存泄露 OldObjectSample 总结 简介 虽然java有自动化的GC,但是还会有内存泄露的情况。当然java中的内存泄露跟C++中的泄露不同。 在C++中所有被分配的内存对象都需要要程序员手动释放。但是在java中并不需[详细]
-
深入理解编译优化之循环展开和粗化锁
所属栏目:[大数据] 日期:2021-05-21 热度:178
目录 简介 循环展开和粗化锁 分析Assembly日志 禁止Loop unrolling 总结 简介 之前在讲JIT的时候,有提到在编译过程中的两种优化循环展开和粗化锁,今天我们和小师妹一起从Assembly的角度来验证一下这两种编译优化方法,快来看看吧。 循环展开和粗化锁 小师[详细]