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类型的返回类型

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天机学堂笔记1

FeignClient(contextId "course", value "course-service") public interface CourseClient {/*** 根据老师id列表获取老师出题数据和讲课数据* param teacherIds 老师id列表* return 老师id和老师对应的出题数和教课数*/GetMapping("/course/infoB…

NLP中常见的分词算法(BPE、WordPiece、Unigram、SentencePiece)

文章目录 一、基本概念二、传统分词方法2.1 古典分词方法2.2 拆分为单个字符 三、基于子词的分词方法(Subword Tokenization)3.1 主要思想3.2 主流的 Subword 算法3.3 Subword 与 传统分词方法的比较 四、Byte Pair Encoding (BPE)4.1 主要思想4.2 算法过…

搭建Hadoop分布式集群

软件和操作系统版本 Hadoop框架是采用Java语言编写,需要java环境(jvm) JDK版本:JDK8版本 ,本次使用的是 Java: jdk-8u431-linux-x64.tar.gz Hadoop: hadoop-3.3.6.tar.gz 三台Linux虚拟节点: CentOS-7-x86_64-DVD-2…

分享一下使用高版本(3.10.x)sonar-maven-plugin 进行构建时需要注意的两个问题

SonarScanner用来执行源代码分析。这个独立的程序在CI/CD主机上运行,并将分析结果发送到SonarQube服务器,由其计算分析结果,计算质量门并生成报告。我们可以通过命令行和maven构建两种方式来执行SonarScanner的源码分析。关于SonarScanner更多…

C语言---函数和数组实践:扫雷游戏

函数和数组实践:扫雷游戏 在这次的实践项目中,需要编写一个可以在在控制台运行的经典的扫雷游戏。 一、游戏要求 游戏有菜单,可以通过菜单实现继续玩或者退出游戏游戏要求棋盘9*9,雷(10个)要求随机布置可…

数据结构与算法之二叉树: LeetCode 701. 二叉搜索树中的插入操作 (Ts版)

二叉搜索树中的插入操作 https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/ 描述 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树返回插入后二叉搜索树的根节点。 输入数据 保…

数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall

数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(fre…

项目实战——使用python脚本完成指定OTA或者其他功能的自动化断电上电测试

前言 在嵌入式设备的OTA场景测试和其他断电上电测试过程中,有的场景发生在夜晚或者随时可能发生,这个时候不可能24h人工盯着,需要自动化抓取串口日志处罚断电上电操作。 下面的python脚本可以实现自动抓取串口指定关键词,然后触发…

深入详解DICOM医学影像定位线相关知识:理解定位线的概念、定位线的作用以及定位线显示和计算原理

DICOM医学影像中的定位线(Localization Line) 在医学影像学中,DICOM是用于存储和交换医学影像的标准格式。定位线(Localization Line)在医学影像的显示和分析中起着重要作用,它帮助医生和医学专业人员在影像中精确地标定重要的解剖结构、区域或特征,辅助进行定位、治疗计…

《自动驾驶与机器人中的SLAM技术》ch8:基于 IESKF 的紧耦合 LIO 系统

目录 基于 IESKF 的紧耦合 LIO 系统 1 IESKF 的状态变量和运动过程 1.1 对名义状态变量的预测 1.2 对误差状态变量的预测及对协方差矩阵的递推 2 观测方程中的迭代过程 3 高维观测中的等效处理 4 NDT 和 卡尔曼滤波的联系 5 紧耦合 LIO 系统的主要流程 5.1 IMU 静止初始化 …

HTML实战课堂之简单的拜年程序

一、目录:  一、目录: 二、祝福 三:代码讲解 (1)详细解释: 1.HTML部分 2. CSS部分 三、运行效果(随机截图): 四、完整代码: 二、祝福…

vue 与 vue-json-viewer 实现 JSON 数据可视化

前言 接口的调试和测试是确保系统稳定性的重要步骤。为了让开发人员和测试人员能够直观地查看接口返回的 JSON 数据,使用合适的工具至关重要。vue-json-viewer 插件为 vue 开发者提供了一个简单而强大的解决方案。本文将详细介绍如何在 vue 项目中使用该插件&#x…

用Pygame Zero 画矩形(空心、实心、多个矩形、多层同心矩形、彩虹条矩形、条纹相间、随机颜色矩形、特殊效果、渐变效果)

用Pygame Zero 画矩形 (空心、实心、多个矩形、多层同心矩形、彩虹条矩形、条纹相间、随机颜色矩形、特殊效果、渐变效果) 本文目录: 零、时光宝盒 一、绘制空心矩形 二、绘制实心矩形 三、画多个静止矩形 四、绘制多层同心矩形 4.1、…

【Rust自学】11.9. 单元测试

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.9.1. 测试的分类 Rust把测试分为两类,一个是单元测试,一个是集成测试。 单元测试比较小也比较专注&#xff…

[java基础-集合篇]优先队列PriorityQueue结构与源码解析

优先队列PriorityQueue 优先级队列表示为平衡二进制堆: queue[n] 的两个子级是 queue[2*n1] 和 queue[2*(n1)]。 注:左子节点index2*parentIndex1,右子节点index2*parentIndex2,源码中计算parent位置时就是这样反过来计算的 优…

回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测

回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测 目录 回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务,存储非结构化数据,兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

MySQL批量修改数据表编码及字符集为utf8mb4

​​​​​​MySQL批量修改数据表编码及字符集为utf8mb4 utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。 更改数据库…

Edge浏览器网页设置深色模式/暗模式

文章目录 需求分析1. 浏览器中的设置——外观——深色。2. 在Edge浏览器的地址栏如下网址:edge://flags/,直接搜索Dark则有内容弹出,将Default更改为Enable即可设置成功。3. 成果 需求 长期对着电脑屏幕,白色实在太刺眼&#xff…

TypeScript Jest 单元测试 搭建

NPM TypeScript 项目搭建 创建目录 mkdir mockprojectcd mockproject初始化NPM项目 npm init -y安装TypeScript npm i -D typescript使用VSCode 打开项目 创建TS配置文件tsconfig.json {"compilerOptions": {"target": "es5","module&…