Java安全编码标准
- Java安全编码标准
具体参考Rules
- 输入验证和数据净化(IDS)规则风险评估概要
IDS00-J净化穿越受信边界的非受信数据
IDS01-J验证前标准化字符串
IDS02-J在验证之前标准化路径名
IDS03-J不要记录未经净化的用户输入
IDS04-J限制传递给ZipInputStream的文件大小
IDS05-J使用ASCII字符集的子集作为文件名和路径名
IDS06-J从格式字符串中排除用户输入
IDS07-J不要向Runtime.exec 方法传递非受信、未净化的数据
IDS08-J净化传递给正则表达式的非受信数据
DS09-J如果没有指定适当的locale,不要使用locale相关方法处理与locale相关的数据
IDS10-J不要拆分两种数据结构中的字符串
IDS11-J在验证前去掉非字符码点
IDS12-J在不同的字符编码中无损转换字符串数据
IDS13-J在文件或者网络I/O两端使用兼容的编码方式
- 声明和初始化(DCL)规则风险评估概要
DCL00-J防止类的循环初始化
DCL01-J不要重用Java标准库的已经公开的标识
DCL02-J将所有增强for语句的循环变量声明为final类型
- 表达式(EXP)规则风险评估概要
EXP00-J不要忽略方法的返回值
EXP01-J不要解引用空指针
EXP02-J使用两个参数的Arrays.equals方法来比较两个数组的内容
EXP03-J不要用相等操作符来比较两个基础数据类型的值
EXP04-J确保使用正确的类型来自动封装数值
EXP05-J不要在一个表达式中对同一变量进行多次写入
EXP06-J不要在断言中使用有副作用的表达式
- 数值类型与运算(NUM)规则风险评估概要
NUM00-J检测和避免整数溢出
NUM01-J不要对同一数据进行位运算和数学运算
NUM02-J确保除法运算和模运算中的除数不为0
NUM03-J使用可容纳无符号数据合法取值范围的整数类型
NUM04-J不要使用浮点数进行精细计算
NUM05-J不要使用非标准化数
NUM06-J使用strictfp修饰符确保跨平台浮点运算的一致性
NUM07-J不要尝试与NaN进行比较
NUM08-J检查浮点输入特殊的数值
NUM09-J不要使用浮点变量作为循环计数器
NUM10-J不要从浮点字元构造BigDecimal对象
NUM11-J不要比较或者审查以字符串表达的浮点数值
NUM12-J确保将数值转换成较小类型时不会产生数据丢失或曲解
NUM13-J转换基本整数类型至浮点类型时应避免精度损失
- 面向对象(OBJ)规则风险评估概要
OBJ00-J只有受信子类能对具有不变性的类和方法进行扩展
OBJ01-J声明数据成员为私有并提供可访问的封装器方法
OBJ02-J当改变基类时,保存子类之间的依赖关系
OBJ03-J在新代码中,不要混用具有泛型和非泛型的原始数据类型
OBJ04-J为可变类提供复制功能,并通过此功能允许将实例传递给非受信代码
OBJ05-J在返回引用之前,防御性复制私有的可变的类成员
OBJ06-J对可变输入和可变的内部组件创建防御性复制
OBJ07-J不允许敏感类复制其自身
OBJ08-J不要在嵌套类中暴露外部类的私有字段
6.10 OBJ09-J比较类而不是类名称
OBJ10-J不要使用公有静态的非final变量
OBJ11-J小心处理构造函数抛出异常的情况
- 方法(MET)规则风险评估概要
MET00-J验证方法参数
MET01-J不要使用断言验证方法参数
MET02-J不要使用弃用的或过时的类和方法
MET03-J进行安全检测的方法必须声明为private或final
MET04-J不要增加被覆写方法和被隐藏方法的可访问性
MET05-J确保构造函数不会调用可覆写的方法
MET06-J不要在clone中调用可覆写的方法
MET07-J不要定义类方法来隐藏基类或基类接口中声明的方法
MET08-J确保比较等同的对象能得到相等的结果
MET09-J定义了equlas方法的类必须定义hashCode方法
MET10-J实现compareTo方法时遵守常规合约
MET11-J确保比较中的关键码是不可变的
MET12-J不要使用析构函数
- 异常行为(ERR)规则风险评估概要
ERR00-J不要消除或忽略可检查的异常
ERR01-J不能允许异常泄露敏感信息
ERR02-J记录日志时应避免异常
ERR03-J在方法失败时恢复对象先前的状态
ERR04-J不要在finally程序段非正常退出
ERR05-J不要在finally程序段中遗漏可检查异常
ERR06-J不要抛出未声明的可检查异常
ERR07-J不要抛出RuntimeException、Exception或Throwable
ERR08-J不要捕捉NullPointerException或任何它的基类
ERR09-J禁止非受信代码终止JVM
- 可见性和原子性(VNA)规则风险评估概要
VNA00-J当需要读取共享基础数据类型变量时,需要保证其可见性
VNA01-J保证对一个不可变对象的共享引用的可见性
VNA02-J保证对于共享变量的组合操作是原子性的
VNA03-J即使每一个方法都是相互独立并且是原子性的,也不要假设一组调用是原子性的
VNA04-J保证串联在一起的方法调用是原子性的
VNA05-J保证在读写64位的数值时的原子性
- 锁(LCK)规则风险评估概要
LCK00-J通过私有final锁对象可以同步那些与非受信代码交互的类
LCK01-J不要基于那些可能被重用的对象进行同步
LCK02-J不要基于那些通过getClass返回的类对象来实现同步
LCK03-J不要基于高层并发对象的内置锁来实现同步
LCK04-J即使集合是可访问的,也不要基于集合视图使用同步
LCK05-J对那些可以被非受信代码修改的静态字段,需要同步进入
LCK06-J不要使用一个实例锁来保护共享静态数据
LCK07-J使用相同的方式请求和释放锁来避免死锁
LCK08-J在异常条件时,保证释放已经持有的锁
LCK09-J不要执行那些持有锁时会阻塞的操作
LCK10-J不要使用不正确形式的双重锁定检查惯用法
LCK11-J当使用那些不能对锁策略进行承诺的类时,避免使用客户端锁定
- 线程API(THI)规则风险评估概要
THI00-J不要调用Thread.run
THI01-J不能调用ThreadGroup方法
THI02-J通知所有等待中的线程而不是单一线程
THI03-J始终在循环中调用wait和await方法
THI04-J确保可以终止受阻线程
THI05-J不要使用Thread.stop来终止线程
- 线程池(TPS)规则风险评估概要
TPS00-J使用线程池处理流量突发以实现降低性能运行
TPS01-J不要使用有限的线程池来执行相互依赖的任务
TPS02-J确保提交至线程池的任务是可中断的
TPS03-J确保线程池中正在执行的任务不会失败而不给出任何提示
TPS04-J使用线程池时,确保ThreadLocal变量可以重新初始化
- 与线程安全相关的其他规则(TSM)规则风险评估概要
TSM00-J不要使用非线程安全方法来覆写线程安全方法
TSM01-J不要让this引用在创建对象时泄漏
TSM02-J不要在初始化类时使用后台线程
TSM03-J不要发布部分初始化的对象
- 输入输出(FIO)规则风险评估概要
FIO00-J不要操作共享目录中的文件
FIO01-J使用合适的访问权限创建文件
FIO02-J发现并处理与文件相关的错误
FIO03-J在终止前移除临时文件
FIO04-J在不需要时关闭资源
FIO05-J不要使用wrap或duplicate创建缓存,并将这些缓存暴露给非受信代码
FIO06-J不能在一个单独的InputStream上创建多个缓存区封装器
FIO07-J不要让外部进程阻塞输入和输出流
FIO08-J对读取一个字符或者字节的方法,使用int类型的返回值
FIO09-J不要使用write方法输出超过0~255的整数
FIO10-J使用read方法保证填充一个数组
FIO11-J不要将原始的二进制数据作为字符数据读入
FIO12-J为小端数据的读写提供方法
FIO13-J不要在受信边界之外记录敏感信息
FIO14-J在程序终止时执行正确的清理动作
- 序列化(SER)规则风险评估概要
SER00-J在类的演化过程中维护其序列化的兼容性
SER01-J不要偏离序列化方法的正确签名
SER02-J在将对象向信任边界之外发送时,需要签名并且封装敏感对象
SER03-J不要序列化未经加密的敏感数据
SER04-J不要允许序列化和反序列化绕过安全管理器
SER05-J不要序列化内部类实例
SER06-J在反序列化时,对私有的可变的组件进行防御性复制
SER07-J不要对实现定义的不可变因素使用默认的序列化格式
SER08-J在从拥有特性的环境中进行反序列化之前最小化特权
SER09-J不要从readObject方法中调用可以被覆写的方法
SER10-J在序列化时,避免出现内存和资源泄漏
SER11-J防止覆盖外部化的对象
- 平台安全性(SEC)规则风险评估概要
SEC00-J不要允许特权代码块越过受信边界泄露敏感信息
SEC01-J不要在特权代码块中使用污染过的变量
SEC02-J不要基于非受信源进行安全检查
SEC03-J不要在允许非受信代码装载任意类之后装载受信类
SEC04-J使用安全管理器检查来保护敏感操作
SEC05-J不要使用反射来增加类、方法和字段的可访问性
SEC06-J不要依赖于默认的由URLClassLoader和java.util.jar提供的自动化签名检查
SEC07-J当编写一个自定义的类装载器时调用基类的getPermissions方法
SEC08-J定义基于原生方法的封装器
- 运行环境(ENV)规则风险评估概要
ENV00-J不要签名只执行非特权操作的代码
ENV01-J将所有安全敏感的代码置于单独一个jar包中,并且在签名之后封装它
ENV02-J不要信任环境变量的值
ENV03-J不要赋予危险的权限组合
ENV04-J不要关闭字节码验证功能
ENV05-J不要部署一个被远程监视的应用
- 其他(MSC)规则风险评估概要
MSC00-J在交换安全数据时使用SSLSocket而不是Socket
MSC01-J不要使用空的无限循环
MSC02-J生成强随机数
MSC03-J不要硬编码敏感信息
MSC04-J防止内存泄漏
MSC05-J不要耗尽堆空间
MSC06-J当一个遍历正在进行时,不要修改它对应的集合
MSC07-J防止多次实例化单例对象
Java安全编码标准的更多相关文章
- Java安全编码之用户输入
0x00 安全引言 1.传统Web应用与新兴移动应用 (1)传统Web应用:浏览器 HTTP 服务器(2)新兴移动应用:APP HTTP 服务器 从安全角度看,传统Web应用与新兴移动应用没有本质区别 ...
- Java Script 编码规范【转】
Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...
- Java语言编码规范(Java Code Conventions)
Java语言编码规范(Java Code Conventions) 名称 Java语言编码规范(Java Code Conventions) 译者 晨光(Morning) 简介 本文档讲述了Java语 ...
- Java 字符编码归纳总结
String newStr = new String(oldStr.getBytes(), "UTF-8"); java中的String类是按照unicode进行编码的 ...
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- 阿里官方Java代码规范标准《阿里巴巴Java开发手册 终极版 v1.3.0》
终极版 v1.3.0 2017年开春之际,阿里诚意献上重磅大礼:<阿里巴巴Java开发手册>,首次公开阿里官方Java代码规范标准.这套Java统一规范标准将有助于提高行业编码规范化水平, ...
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
我们最初学习计算机的时候,都学过ASCII编码. 但是为了表示各种各样的语言,在计算机技术的发展过程中,逐渐出现了很多不同标准的编码格式, 重要的有Unicode.UTF.ISO-8859-1和中国人 ...
- Java 字符编码(二)Java 中的编解码
Java 字符编码(二)Java 中的编解码 java.nio.charset 包中提供了一套处理字符编码的工具类,主要有 Charset.CharsetDecoder.CharsetEncoder. ...
随机推荐
- 【深度学习】BP反向传播算法Python简单实现
转载:火烫火烫的 个人觉得BP反向传播是深度学习的一个基础,所以很有必要把反向传播算法好好学一下 得益于一步一步弄懂反向传播的例子这篇文章,给出一个例子来说明反向传播 不过是英文的,如果你感觉不好阅读 ...
- 开启Unity3D之旅
圣典知识目录http://game.ceeger.com/Manual/ NGUI http://www.taikr.com/course/34泰课课程 http://tieba.baidu.com/ ...
- Espresso小试
Espresso开源了,那就试着用一下, 1. 下载Espresso Espresso没有提供单独的jar包下载,建议clone整个项目或者下载zip包 git clone https://code. ...
- 网页如何检查浏览器是否安装flash插件
如果页面需要加载flash插件并且需要提示用户flash下载,这里有个官方很好的js文件只要引用就可以实现 //v1.7 // Flash Player Version Detection // De ...
- 峰Redis学习(7)Redis 持久化RDB方式
第一节:Redis 持久化介绍 redis所有的数据都存在内存中,所以速度非常快,但是一旦断电等情况,数据就没了.从内存当中同步到硬盘上,这个过程叫做持久化过程. 持久化操作,两种方式:rdb方式.a ...
- PAT 乙级 1076 Wifi密码 (15)
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用wifi,又怕耽误亲们的学习,现将wifi密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同学们自己作答,每两日一换.谢 ...
- appium+python自动化42-微信公众号 (可能以后会遇到也遇到切换不了webview的问题 记录再此 还没试)
前言 本篇介绍如何在微信公众号上自动化测试,以操作我的个人公众号:yoyoketang为例,没关注的,先微信关注了,再跟着操作 环境准备:python 3.6appium 1.7以上版本微信6.6.6 ...
- 数据库SQL语言学习--上机练习2(连接查询 嵌套查询)
上机练习2 1. 启动SQL Server 2008中的 SQL Server Management Studio. 2. 针对下面三张基本表进行操 ...
- Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap
网上也有好多方法我没有试成功,不过我将maven的conf setting.xml里的 阿里镜像给注释就可以了,你们也可以试试
- [UE4]AWP开镜时模糊
一.Add to Viewport的Zorder越大,添加进来的UI越靠近前面.也就是大的Zorder会覆盖Zorder小的UI. 二.镜头模糊,在专心UI中添加一个模糊滤镜设置模糊值,并放在最上层.