1. Java安全编码标准

具体参考Rules

    1. 输入验证和数据净化(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两端使用兼容的编码方式

    1. 声明和初始化(DCL)规则风险评估概要

DCL00-J防止类的循环初始化

DCL01-J不要重用Java标准库的已经公开的标识

DCL02-J将所有增强for语句的循环变量声明为final类型

    1. 表达式(EXP)规则风险评估概要

EXP00-J不要忽略方法的返回值

EXP01-J不要解引用空指针

EXP02-J使用两个参数的Arrays.equals方法来比较两个数组的内容

EXP03-J不要用相等操作符来比较两个基础数据类型的值

EXP04-J确保使用正确的类型来自动封装数值

EXP05-J不要在一个表达式中对同一变量进行多次写入

EXP06-J不要在断言中使用有副作用的表达式

    1. 数值类型与运算(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转换基本整数类型至浮点类型时应避免精度损失

    1. 面向对象(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小心处理构造函数抛出异常的情况

    1. 方法(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不要使用析构函数

    1. 异常行为(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

    1. 可见性和原子性(VNA)规则风险评估概要

VNA00-J当需要读取共享基础数据类型变量时,需要保证其可见性

VNA01-J保证对一个不可变对象的共享引用的可见性

VNA02-J保证对于共享变量的组合操作是原子性的

VNA03-J即使每一个方法都是相互独立并且是原子性的,也不要假设一组调用是原子性的

VNA04-J保证串联在一起的方法调用是原子性的

VNA05-J保证在读写64位的数值时的原子性

    1. 锁(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当使用那些不能对锁策略进行承诺的类时,避免使用客户端锁定

    1. 线程API(THI)规则风险评估概要

THI00-J不要调用Thread.run

THI01-J不能调用ThreadGroup方法

THI02-J通知所有等待中的线程而不是单一线程

THI03-J始终在循环中调用wait和await方法

THI04-J确保可以终止受阻线程

THI05-J不要使用Thread.stop来终止线程

    1. 线程池(TPS)规则风险评估概要

TPS00-J使用线程池处理流量突发以实现降低性能运行

TPS01-J不要使用有限的线程池来执行相互依赖的任务

TPS02-J确保提交至线程池的任务是可中断的

TPS03-J确保线程池中正在执行的任务不会失败而不给出任何提示

TPS04-J使用线程池时,确保ThreadLocal变量可以重新初始化

    1. 与线程安全相关的其他规则(TSM)规则风险评估概要

TSM00-J不要使用非线程安全方法来覆写线程安全方法

TSM01-J不要让this引用在创建对象时泄漏

TSM02-J不要在初始化类时使用后台线程

TSM03-J不要发布部分初始化的对象

    1. 输入输出(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在程序终止时执行正确的清理动作

    1. 序列化(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防止覆盖外部化的对象

    1. 平台安全性(SEC)规则风险评估概要

SEC00-J不要允许特权代码块越过受信边界泄露敏感信息

SEC01-J不要在特权代码块中使用污染过的变量

SEC02-J不要基于非受信源进行安全检查

SEC03-J不要在允许非受信代码装载任意类之后装载受信类

SEC04-J使用安全管理器检查来保护敏感操作

SEC05-J不要使用反射来增加类、方法和字段的可访问性

SEC06-J不要依赖于默认的由URLClassLoader和java.util.jar提供的自动化签名检查

SEC07-J当编写一个自定义的类装载器时调用基类的getPermissions方法

SEC08-J定义基于原生方法的封装器

    1. 运行环境(ENV)规则风险评估概要

ENV00-J不要签名只执行非特权操作的代码

ENV01-J将所有安全敏感的代码置于单独一个jar包中,并且在签名之后封装它

ENV02-J不要信任环境变量的值

ENV03-J不要赋予危险的权限组合

ENV04-J不要关闭字节码验证功能

ENV05-J不要部署一个被远程监视的应用

    1. 其他(MSC)规则风险评估概要

MSC00-J在交换安全数据时使用SSLSocket而不是Socket

MSC01-J不要使用空的无限循环

MSC02-J生成强随机数

MSC03-J不要硬编码敏感信息

MSC04-J防止内存泄漏

MSC05-J不要耗尽堆空间

MSC06-J当一个遍历正在进行时,不要修改它对应的集合

MSC07-J防止多次实例化单例对象

Java安全编码标准的更多相关文章

  1. Java安全编码之用户输入

    0x00 安全引言 1.传统Web应用与新兴移动应用 (1)传统Web应用:浏览器 HTTP 服务器(2)新兴移动应用:APP HTTP 服务器 从安全角度看,传统Web应用与新兴移动应用没有本质区别 ...

  2. Java Script 编码规范【转】

    Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...

  3. Java语言编码规范(Java Code Conventions)

    Java语言编码规范(Java Code Conventions) 名称 Java语言编码规范(Java Code Conventions) 译者 晨光(Morning) 简介 本文档讲述了Java语 ...

  4. Java 字符编码归纳总结

    String newStr = new String(oldStr.getBytes(), "UTF-8");       java中的String类是按照unicode进行编码的 ...

  5. 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  6. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  7. 阿里官方Java代码规范标准《阿里巴巴Java开发手册 终极版 v1.3.0》

    终极版 v1.3.0 2017年开春之际,阿里诚意献上重磅大礼:<阿里巴巴Java开发手册>,首次公开阿里官方Java代码规范标准.这套Java统一规范标准将有助于提高行业编码规范化水平, ...

  8. 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    我们最初学习计算机的时候,都学过ASCII编码. 但是为了表示各种各样的语言,在计算机技术的发展过程中,逐渐出现了很多不同标准的编码格式, 重要的有Unicode.UTF.ISO-8859-1和中国人 ...

  9. Java 字符编码(二)Java 中的编解码

    Java 字符编码(二)Java 中的编解码 java.nio.charset 包中提供了一套处理字符编码的工具类,主要有 Charset.CharsetDecoder.CharsetEncoder. ...

随机推荐

  1. [转][JS]修改链接中的参数

    转自:https://blog.csdn.net/weixin_40845192/article/details/81561644 /** * url地址修改 * @param url 待修改url ...

  2. docker安装testlink

    testlink 镜像 https://hub.docker.com/r/bitnami/testlink ```#shell 下载镜像 docker pull bitnami/testlink

  3. 详解http和https的作用与区别

    PS: https就是http和TCP之间有一层SSL层,这一层的实际作用是防止钓鱼和加密.防止钓鱼通过网站的证书,网站必须有CA证书,证书类似于一个解密的签名.另外是加密,加密需要一个密钥交换算法, ...

  4. [UE4]射击起点、终点的计算方法

    一.射击起点,这个简单,一般是以角色的相机位置为作为射击起点,而不是枪口的位置作为起点 二.射击终点,角色朝向 * 射击距离 + 射击起点 角色朝向:单位向量 角色朝向 * 射击距离:向量长度 向量长 ...

  5. synchronous-request-with-websockets

    https://stackoverflow.com/questions/13417000/synchronous-request-with-websockets

  6. 第11章 拾遗4:IPv6(1)_报文格式和地址类型

    1. IPv4和IPv6协议栈的比较 (1)IPv6取代IPv4,支持IPv6的动态路由协议都属于IPv6协议(如RIPng.OSPFv3). (2)Internet控制消息协议IPv6版(ICMPv ...

  7. Hadoop Api 基本操作

     hadoop环境配置好后,直接可以在window上进行调试.话不多说,直接上源码. package cn.terry; import java.io.FileInputStream; import ...

  8. sql语句中order by 多个字段同时排序的应用

    order  by 后面可以跟多个字段进行排序 用A1代表第一个字段,A2代表第二个字段 一.order by A1 , A2  desc   指的是用A1升序A2降序 二.order by A1 a ...

  9. 【LeetCode】2. Add Two Numbers 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  10. vue打印html

    # vue打印功能 console.log(data.doPrint); // html字符串 let newContent =data.doPrint; let oldContent = docum ...