JAVA安全编码规范

1.  数据校验

对外部输入进行校验入参的合法性,

防止内存越界,命令注入,SQL注入,格式化字符串漏洞

校验长度,范围,输入校验采用白名单形式

校验前做归一化处理,使用java.text.Normalizer的normalize()方法, 防止字符转义绕过校验。

禁止直接使用外部输入来拼接SQL,推荐使用preparedstatement ,存储过程,或对外部输入转义

禁止直接使用外部输入开拼接XML,推荐使用正则表达式对输入进行校验

在对路径进行验证前先对其做标准化,如路径中的.和.. 相对路径,不要使用f.getabsolutepath,推荐使用f.getcanonicalpath

对zipinputstream中的条目做大小限制

 

2. 异常

禁止在异常中暴露敏感信息

 

3. IO操作

临时文件用完及时删除

禁止将buffer类中的wrap或duplicate创建的buffer暴露给不受信任的代码,推荐使用asreadonlybuffer()获取只读视图

禁止在单个输入流inputstream上创建多份bufferedinputstream,推荐将bufferedinputstream作为类变量(静态变量)

避免在共享目录操作文件

创建文件时指定合理的访问权限 posixfilepermission

 

4. 序列化

敏感数据发送出信任区域要先签名再加密,objectoutputstream 对象输出流,又叫序列化流,objectinputstream对象输入流,又叫反序列化流。

禁止序列化未加密的敏感数据,推荐通过transient关键字保证敏感数据不被序列化,也可以通过自定义writeobject()方法,不将敏感字段写到序列化流中。

防止序列化和反序列化被利用来绕开安全管理,java 序列化方法writeobject(),反序列化方法readobject()

 

避免依赖和信任环境变量,不要使用system.getenv,推荐使用system.getproperty

禁止在日志中保存口令,密钥

使用安全的标准的加密算法,禁用私有算法或弱加密算法(如DES SHA),推荐的对称加密算法 AES 128位,推荐的非对称加密算法RSA 2048位,DSA 1024位, 摘要算法SHA256

使用强随机数,securerandom

 

6 命名

所有标识符仅使用ASCII字母和数字 匹配正则\w{2,64}

注释

排版

文件不超过2000刚(非空非注释行)

一个类或接口的声明部分应当按照类(静态)变量,实例变量,构造器,方法的顺序出现

对于块状结构,左大括号放在行尾

每行限长120个窄字符

禁止C风格的数组声明,使用string[] args

switch语句要有default分支,即使不包含任何代码

 

变量

谨慎使用静态成员变量

不能用float浮点数作为循环变量

需要精确计算时不要使用float 和double,建议使用int,long,bigdecimal

方法不超过50行

方法的代码块嵌套不要超过4层

不要直接把入参作为临时变量

方法的参数个数不应超过5个

对于返回数组或容器的方法,应返回长度为0的数组或者容器,代替返回null

 

类和接口

覆写 ---- 子类与父类,一个实例方法可以覆写其在超类中可访问到(非private)的实例方法(非static),与父类同名同参,返回类型一致

重载----类内部,同名不同参,返回类型等其他无要求。

覆写equal方法时应同时覆写hashcode方法

接口定义中,属性已缺省具有public static final 修饰词,方法已缺省具有 public abstract 修饰词

方法抛出的异常应该与本身的抽象层次相对应

在finally块中不要使用return break 使finally块非正常结束

一个方法不应抛出超过5个异常

记录异常不要使用exception.getmessage,而要用exception.tostring

运行时异常不需要throws

 

日志工具logger类的实例应声明为 private static final

 

多线程并发

volatile ,提供轻量级的同步机制,和synchronized不同,只能修饰变量,声明一个可能被多线程访问的变量,共享变量。

volatile并不保证原子性,而synchronized修饰的方法或代码块,保证了锁住的代码可以全部执行,不被中断

 

不要在for each循环里进行元素的remove add,删除元素使用removeif 或iterator

 

大量字符串相加如果有线程安全要求应该使用stringbuffer,不涉及线程安全应使用stringbuilder

 

从流中读取一个字符或字节,使用int类型的返回类型

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/954492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自建RustDesk服务器

RustDesk服务端 下面的截图是我本地的一个服务器做为演示用,你自行的搭建服务需要该服务器有固定的ip地址 1、通过宝塔面板快速安装 2、点击【安装】后会有一个配置信息,默认即可 3、点击【确认】后会自动安装等待安装完成 4、安装完成后点击【打开…

JavaSE学习心得(反射篇)

反射 前言 获取class对象的三种方式 利用反射获取构造方法 利用反射获取成员变量 利用反射获取成员方法 练习 保存信息 跟配置文件结合动态创建 前言 接上期文章:JavaSE学习心得(多线程与网络编程篇) 教程链接:黑马…

工业视觉2-相机选型

工业视觉2-相机选型 一、按芯片类型二、按传感器结构特征三、按扫描方式四、按分辨率大小五、按输出信号六、按输出色彩接口类型 这张图片对工业相机的分类方式进行了总结,具体如下: 一、按芯片类型 CCD相机:采用电荷耦合器件(CC…

信凯科技业绩波动明显:毛利率远弱行业,资产负债率偏高

《港湾商业观察》施子夫 1月8日,深交所官网显示,浙江信凯科技集团股份有限公司(以下简称“信凯科技”)主板IPO提交注册。 自2022年递交上市申请,信凯科技的IPO之路已走过两年光景,尽管提交注册&#xff0…

1.15学习

web ctfhub-网站源码 打开环境,查看源代码无任何作用,但是其提醒就在表面暗示我们用dirsearch进行目录扫描,登录kali的root端,利用终端输入dirsearch -u 网址的命令扫描该网址目录,扫描成功后获得信息,在…

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中,下载、部署NVM(node.js version management)环境,并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法(https://blog.csdn.net/zhebushibiaoshi…

Android Studio历史版本包加载不出来,怎么办?

为什么需要下载历史版本呢? 虽然官网推荐使用最新版本,但是最新版本如果自己碰到问题,根本找不到答案,所以博主这里推荐使用历史版本!!! Android Studio历史版本包加载不出来? 下…

一招解决word嵌入图片显示不全问题

大家在word中插入图片的时候有没有遇到过这个问题,明明已经将图片的格式选为“嵌入式”了,但是图片仍然无法完全显示,这个时候直接拖动图片可能会使文字也乱掉,很难精准定位位置。 这个问题是由于行距设置导致的,行距…

C# (图文教学)在C#的编译工具Visual Studio中使用SQLServer并对数据库中的表进行简单的增删改查--14

目录 一.安装SQLServer 二.在SQLServer中创建一个数据库 1.打开SQL Server Manager Studio(SSMS)连接服务器 2.创建新的数据库 3.创建表 三.Visual Studio 配置 1.创建一个简单的VS项目(本文创建为一个简单的控制台项目) 2.添加数据库连接 四.简单连通代码示例 简单连…

CentOS 7 下 MySQL 5.7 的详细安装与配置

1、安装准备 下载mysql5.7的安装包 https://dev.mysql.com/get/mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar 下载后上传至/home目录下 2、mysql5.7安装 2.1、更新yum并安装依赖 yum update -y sudo yum install -y wget sudo yum install libaio sudo yum install perl su…

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置(batch size 1): 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…

TY1801 反激变换器PWM GaN功率开关

TY1801 是一款针对离线式反激变换器的多模式 PWM GaN 功率开关。TY1801 内置 GaN 功率管,它具备超宽 的 VCC 工作范围,非常适用于 PD 快充等要求宽输出电压的应用场合,系统不需要使用额外的绕组或外围降压电路,节省系统 BOM 成本。TY1801 支持 Burst&…

Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比

先说结论: Swgger 3.0 与Swagger 2.0 区别很大,Swagger3.0用了最新的注释实现更强大的功能,同时使得代码更优雅。 就个人而言,如果新项目推荐使用Swgger 3.0,对于工具而言新的一定比旧的好;对接于旧项目原…

【算法】图解两个链表相交的一系列问题

问: 给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null。如果两个链表长度之和为N,时间复杂度请达到O(N…

2025开年解读:AI面试 VS 传统面试本质上区别有哪些?

2024年,AI面试以其高效、便捷的特点逐渐走入大众视野,成为越来越多企业的首选。2025年开年,AI面试再次出现爆发式增长趋势,那么,相较于传统的面对面面试,AI面试究竟有哪些本质上的区别呢?这不仅…

springboot web基础分层解耦三层架构IOC详解 DI详解 依赖注入

三层架构 分层解耦 解除了耦合 IOC DI入门 IOC详解 组件扫描 DI详解 一般用第一种,规范性高用第二种 第三种一般不用 注意事项

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (五、电影详情页的设计实现)

在上一篇文章中,完成了电影列表页的开发。接下来,将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息,包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件,并结合第三方库 nutpi/axios 来实现…

交叉编译avahi到aarch64平台

谢绝转载 一、背景 准备学习无中心网络组网,研究如何实现无中心网络IP分配 二、环境搭建过程 找到的有参考价值的网页: https://zhuanlan.zhihu.com/p/60892150322 gcc_7.5.sh #! /bin/shexport PATH/home/ws/chain_tools/gcc-linaro-7.5.0-2019.1…

springMVC实现文件上传

目录 一、创建项目 二、引入依赖 三、web.xml 四、编写上传文件的jsp页面 五、spring-mvc.xml 六、controller 七、运行 一、创建项目 二、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…

6.1 MySQL数字函数和条件函数

以前我们在课程中使用过一些mysql的内置函数&#xff0c;比如说四舍五入的round函数&#xff0c;做日期计算的data, datediff函数等等。那么本次课程咱们就来系统的学习一下mysql的这些内置函数&#xff0c;我们使用编程语言写程序的时候&#xff0c;通常会把某一项业务功能封装…