首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
java安全编码规范
程序那些事
创建于2021-08-26
订阅专栏
java安全编码规范
等 4 人订阅
共24篇文章
创建于2021-08-26
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
java安全编码指南之:文件和共享目录的安全性
java程序是跨平台的,可以运行在windows也可以运行在linux。但是平台不同,平台中的文件权限也是不同的。windows大家经常使用,并且是可视化的权限管理,这里就不多讲了。 本文主要讲讲linux下面的文件的权限和安全性问题,并且探讨一下如何在java程序中考虑文件的…
java安全编码指南之:序列化Serialization
序列化是java中一个非常常用又会被人忽视的功能,我们将对象写入文件需要序列化,同时,对象如果想要在网络上传输也需要进行序列化。 一起来看看吧。 如果一个对象要想实现序列化,只需要实现Serializable接口即可。 奇怪的是Serializable是一个不需要任何实现的接口…
java安全编码指南之:文件IO操作
对于文件的IO操作应该是我们经常会使用到的,因为文件的复杂性,我们在使用File操作的时候也有很多需要注意的地方,下面我一起来看看吧。 不管是在windows还是linux,文件都有权限控制的概念,我们可以设置文件的owner,还有文件的permission,如果文件权限没有控…
java安全编码指南之:线程安全规则
如果我们在多线程中引入了共享变量,那么我们就需要考虑一下多线程下线程安全的问题了。那么我们在编写代码的过程中,需要注意哪些线程安全的问题呢? 一起来看看吧。 我们在实现子类功能的时候,一定要保持方法的线程安全性。 this是什么呢?根据JLS的规范,当用作主要表达式时,关键字t…
java安全编码指南之:ThreadPool的使用
一起来看看吧。 Executors.newCachedThreadPool,根据需要可以创建新线程的线程池。线程池中曾经创建的线程,在完成某个任务后也许会被用来完成另外一项任务。 Executors.newFixedThreadPool(int nThreads) ,创建一个可…
java安全编码指南之:Thread API调用规则
一起来看一看吧。 start()是一个synchronized的方法,通过它会去调用native的start0方法,而最终将会调用Thread的run()方法。 我们知道,创建一个Thread有两种方式,一种是传入一个Runnable,一个是继承Thread,并重写run()方…
java安全编码指南之:锁的双重检测
双重检测锁定模式是一种设计模式,我们通过首次检测锁定条件而不是实际获得锁从而减少获取锁的开销。 双重检查锁定模式用法通常用于实现执行延迟初始化的单例工厂模式。延迟初始化推迟了成员字段或成员字段引用的对象的构造,直到实际需要才真正的创建。 但是我们需要非常小心的使用双重检测模式,…
java安全编码指南之:输入注入injection
注入问题是安全中一个非常常见的问题,今天我们来探讨一下java中的SQL注入和XML注入的防范。 SQL注入的意思是,用户输入了某些参数,最终导致SQL的执行偏离了程序设计者的本意,从而导致越权或者其他类型的错误。 也就是说因为用户输入的原因,导致SQL的涵义发送了变化。 我们…
java安全编码指南之:lock和同步的正确使用
在java多线程环境中,lock和同步是我们一定会使用到的功能。那么在java中编写lock和同步相关的代码之后,需要注意哪些问题呢?一起来看看吧。 一般来说我们在做多线程共享对象的时候就需要进行同步。java中有两种同步方式,第一种就是方法同步,第二种是同步块。 如果我们在实…
java安全编码指南之:方法编写指南
java程序的逻辑是由一个个的方法组成的,而在编写方法的过程中,我们也需要遵守一定的安全规则,比如方法的参数进行校验,不要在assert中添加业务逻辑,不要使用废弃或者过期的方法,做安全检查的方法一定要设置为private等。 今天我们再来深入的探讨一下,java方法的编写过程…
java安全编码指南之:死锁dead lock
java中为了保证共享数据的安全性,我们引入了锁的机制。有了锁就有可能产生死锁。 死锁的原因就是多个线程锁住了对方所需要的资源,然后现有的资源又没有释放,从而导致循环等待的情况。 通常来说如果不同的线程对加锁和释放锁的顺序不一致的话,就很有可能产生死锁。 上面的例子中,我们模拟…
java安全编码指南之:异常处理
一起来看看吧。 先上个图,看一下常见的几个异常类型。 所有的异常都来自于Throwable。Throwable有两个子类,Error和Exception。 Error通常表示的是严重错误,这些错误是不建议被catch的。 Exception表示的是应用程序希望catch住的异常…
java安全编码指南之:敏感类的拷贝
一般来说class中如果包含了私有的或者敏感的数据的时候是不允许被拷贝的。 一起来看看吧。 为了实现上面的功能,我们可以考虑引入一个是否返回的变量,如果返回过了,就不允许进行密码修改了。 通过加入了returned标签,我们可以控doPasswordChange方法,只能在未返…
java安全编码指南之:可见性和原子性
java类中会定义很多变量,有类变量也有实例变量,这些变量在访问的过程中,会遇到一些可见性和原子性的问题。这里我们来详细了解一下怎么避免这些问题。 实际上,不可变对象只能保证在多线程环境中,对象使用的安全性,并不能够保证对象的可见性。 我们定义了一个ImmutableObjec…
java安全编码指南之:输入校验
为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要对所有的用户输入都进行一定程度的校验。 本文将带领大家探讨一下用户输入校验的一些场景。一起来看看吧。 通常我们在进行字符串校验的时候需要对一些特殊字符进行过滤,过滤之后再进行字符串的校验。 我…
java安全编码指南之:堆污染Heap pollution
什么是堆污染呢?堆污染是指当参数化类型变量引用的对象不是该参数化类型的对象时而发生的。 我们知道在JDK5中,引入了泛型的概念,我们可以在创建集合类的时候,指定该集合类中应该存储的对象类型。 如果在指定类型的集合中,引用了不同的类型,那么这种情况就叫做堆污染。 上面的例子中,我…
java安全编码指南之:字符串和编码
字符串是我们日常编码过程中使用到最多的java类型了。全球各个地区的语言不同,即使使用了Unicode也会因为编码格式的不同采用不同的编码方式,如UTF-8,UTF-16,UTF-32等。 我们在使用字符和字符串编码的过程中会遇到哪些问题呢?一起来看看吧。 在java中Stri…
java安全编码指南之:Number操作
java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧。 考虑到我们最常用的int操作,虽然int的范围够大,但是如果我们在做一些int操作的时候还是…
java安全编码指南之:表达式规则
在java编写过程中,我们会使用到各种各样的表达式,在使用表达式的过程中,有哪些安全问题需要我们注意的呢?一起来看看吧。 我们在使用JDK库的时候,一定要注意认真的读一下JDK中方法的含义和它的返回值。 有些返回值可能表示这个操作是否成功,有的返回值可能是方法操作的结果。我们看…
java安全编码指南之:声明和初始化
在java对象和字段的初始化过程中会遇到哪些安全性问题呢?一起来看看吧。 根据JLS(Java Language Specification)中的定义,class在初始化过程中,需要同时初始化class中定义的静态初始化程序和在该类中声明的静态字段(类变量)的初始化程序。 而对…
下一页