当前位置: 首页 > news >正文

Java安全编程

为什么80%的码农都做不了架构师?>>>   hot3.png

1.限制敏感数据的生命周期

对存储敏感信息的数据用后没有清除

---解决方案: 对敏感信息使用过后, 要主动进行清除. 尽量不用String这样的不可变数据存储.

敏感信息被交换到磁盘存储

---解决方案: 选用安全操作系统

通过日志, 调试信息等暴露敏感信息

----解决方案: 对相关信息进行检查

通过缓存(bufferedReader)读取敏感数据后, 没有清除缓存

----解决方案: 改用Channel, 并主动调用clear()方法清空缓存

2.不要在客户端存储未经加密的敏感数据

----解决方案: 在客户端存储的数据进加密, 并用有效时间控制风险

3.为敏感可变类提供不可修改的包装器

内部可变的敏感数据在对外返回时, 可能受到恶意修改

----解决方案: 通过创建子类, 并重写敏感数据方法, 将数据复制后返回,

4.确保安全敏感方法被调用时参数经过验证

5.防止任意文件上传

----解决方案: 通过Apache Tika 对文件元数据进行解析和验证

6. 正确的编码或转义输出

----解决方案: 对于危险的字符, 如HTML里的<>, 即使输入相关可信, 也要再对输出信息进行检查和转义

7.防止代码注入

----解决方案: 在使用Javascript这样的脚本引擎时, 要对输出的代码进行白名单无害化处理.

8.不要依赖可以被不可信代码覆盖的方法

----解决方案: 当调用一个不可信对象的clone()方法进行主动防御式编程时, 可能启用了恶意代码, 对此应使用手动复制的方法;  如果对于一个复合对象, 不能确定其equals方法重写是否可信, 可以用逐个属性比对的方式处理. 对于自定义的敏感类, 可用final修饰, 保证其不会被恶意重写.

9.不要使用不安全的弱加密算法

----解决方案: 如MD5, DES, 3DES, SHA-1等不安全的加密算法, 不要在生产环境中使用

10.使用散列算法存储密码等单向敏感信息

----解决方案: 将密码等信息用SHA-256 等算法散列后进行存储, 既能提高很高的安全性, 又保持密码的单向验证功能.

11.确保SecureRandom正确地选择随机种子

----解决方案: SecureRandom类的默认构造方法是选择了一个内部很强随机性的种子, 如果你不能保证自己提供的随机种子的随机性, 请用默认构造方法.

12.不要授予过多的特权

----解决方案: 在用AccessController的doPrivileged()方法进行授权时, 应传递第二个参数进行权限的限制.

13.最小化特权代码

----解决方案: 确保特权代码段只包含需求增加特权的操作.

14.不要将使用降低安全性检查的方案暴露给不可信代码

JVM支持类加载器通过动态加载额外的类来在运行时扩展, 类加载器架构通过使用不同的类加载器来控制来自不同来源的代码之间的交互. 如果攻击类的类加载器可以将不可信类的加载委托给可信类的类加载器, 将发生特权升级.

----解决方案: 不要对外开放据有类加载能力的可信代码. 防止被攻击利用.

 

转载于:https://my.oschina.net/piorcn/blog/845869

相关文章:

  • curator教程二——分布式锁
  • 理解WEB API网关
  • [APUE]进程关系(下)
  • 已看电影|连续剧_已迁移
  • 循序渐进Python3(十三) --6--  cookie和session
  • sed和awk的使用
  • Linux运维笔记-云服务器数据盘挂载
  • 大端模式与小端模式、网络字节顺序与主机字节顺序
  • Azure实践系列 2:Azure AD中的用户管理
  • 数据类型和逻辑运算符的一点整理
  • java Stack类 Vector类
  • 事件绑定的几种常见方式
  • Connection Quality Indicator-Citrix VDA连接质量诊断工具
  • spark 02 操作算子
  • 轻松使用二进制安装Mysql5.6
  • AHK 中 = 和 == 等比较运算符的用法
  • Brief introduction of how to 'Call, Apply and Bind'
  • exif信息对照
  • Invalidate和postInvalidate的区别
  • Linux gpio口使用方法
  • ng6--错误信息小结(持续更新)
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python中eval与exec的使用及区别
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 阿里云购买磁盘后挂载
  • 闭包--闭包作用之保存(一)
  • 编写高质量JavaScript代码之并发
  • 关于字符编码你应该知道的事情
  • 聊聊sentinel的DegradeSlot
  • 如何在GitHub上创建个人博客
  • 使用common-codec进行md5加密
  • 微信开放平台全网发布【失败】的几点排查方法
  • #etcd#安装时出错
  • #if和#ifdef区别
  • (1) caustics\
  • (4)STL算法之比较
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .net core 6 redis操作类
  • .NET 的程序集加载上下文
  • .net 受管制代码
  • .NET分布式缓存Memcached从入门到实战
  • .Net中ListT 泛型转成DataTable、DataSet
  • .NET中的Exception处理(C#)
  • @Pointcut 使用
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ C++ ] STL---string类的模拟实现
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [Android Pro] AndroidX重构和映射
  • [Angular 基础] - 指令(directives)