文章图片
安全性是软件开发中最复杂、最广泛、最重要的方面之一 。 软件安全性也经常被忽视 , 或者在开发周期结束时被过分简化为仅仅几个小的调整 。 Java是一个具有许多内置安全特性的长期开发平台 。 Java安全包经过了密集的战斗测试 , 并经常更新新的安全漏洞 , java生态系统还包括一系列用于分析和报告安全问题的工具 。
下面的基本规则为构建更安全的java应用程序提供了良好的基础 。
规则1:编写干净、强大的Java代码
漏洞喜欢隐藏在复杂性中 , 因此在不牺牲功能的情况下尽可能使代码简单 。 使用DRY(不要重复)等经验证的设计原则将帮助你编写更容易检查问题的代码 。
始终在代码中公开尽可能少的信息 。 隐藏实现细节支持既可维护又安全的代码 。
规则2:避免序列化
序列化接收远程输入并将其转换为完全赋予的对象 。 它省去了构造函数和访问修饰符 , 并允许未知数据流成为JVM中的运行代码 。 因此 , Java序列化本质上是非常不安全的 。
尽可能避免Java代码中的序列化/反序列化 。 相反 , 考虑使用JSON或YAML等序列化格式 。 永远不要公开接收序列化流并对其进行操作的未受保护的网络端点 。 这只不过是一个受欢迎的混乱垫子 。
规则3:永远不要公开未加密的凭据或PII
当用户在浏览器中输入密码时 , 密码将以明文形式发送到服务器 。 在将密码持久化到数据库之前 , 必须通过单向密码对密码进行加密 , 然后在与该值进行比较时再次进行加密 。
密码规则适用于所有个人识别信息(PII):信用卡、社会安全号码等 。 委托给你的应用程序的任何个人信息都应受到最高级别的关注 。
数据库中未加密的凭据或PII是一个巨大的安全漏洞 , 等待攻击者发现 。 同样 , 切勿将原始凭证写入日志 , 或以其他方式传输到文件或网络 。 相反 , 为你的密码创建一个盐度散列 。 请务必进行研究并使用推荐的散列算法 。
规则4:使用已知和已测试的库
尽可能使用已知、可靠的库和框架 。 这适用于从密码散列到RESTAPI授权的所有领域 。 Spring安全性是事实上的标准 。 它提供了广泛的选项和灵活性 , 以适应任何应用程序架构 , 并结合了一系列安全方法 。
处理安全问题的第一反应应该是做研究 。 研究最佳实践 , 然后研究哪个库将为你实施这些实践 。 即使使用可靠的工具 , 也很容易搞错授权和身份验证 。 确保动作缓慢 , 并仔细检查你所做的一切 。
规则5:考虑使用java安全管理器Java有一个安全管理器 , 可以用来限制正在运行的进程可以访问的资源 。 它可以在磁盘、内存、网络和JVM访问方面隔离程序 。 缩小应用程序的这些要求可以减少攻击可能造成的伤害 。 这种隔离也会带来不便 , 这就是为什么默认情况下不启用SecurityManager的原因 。
你必须自己决定 , 围绕SecurityManager的强烈意见工作是否值得为你的应用程序提供额外的保护层 。 有关Java安全管理器的语法和功能的更多信息 , 请参阅Oracle文档 。
规则6:监视和记录用户活动
如果不主动监视应用程序 , 即使是简单的暴力攻击也可能成功 。 使用监控和日志工具关注应用程序运行状况 。
如果你想确信为什么监视很重要 , 只需坐下来观察应用程序侦听端口上的TCP数据包 。 你将看到各种各样的活动 , 远远超过简单的用户交互 。 其中一些活动将是机器人和恶棍扫描漏洞 。
- PSVR|Resolution Games将大力支持开发PSVR 2游戏
- 能量密度达500Wh/kg!日本开发出新款锂空气电池
- 百度|马化腾的一句话,腾讯市值一小时暴涨1400亿港币,马云格局还是小了
- 百度|传英伟达加大GeForce RTX 3050供应力度,大量供货将在春节后到来
- 联想|4个细节证明:联想并不安全,反而更加危险!
- 区委领导构筑静安数字经济竞争新优势|促发展、保安全| 区委
- 白白胖胖头顶起雾走走停停安全无误在哈尔滨站候车厅内一边消毒一边在室内移动的智能消毒机器人...|火车站里的机器人服务,是什么体验?
- 国家安全|英方自曝在华为内部安插间谍:把华为查了个遍!
- 云曦灵|对象终于能包分配了?百度希望未来两年实现“数字人自由”
- 《消逝的光芒》开发商保证:游戏将获得 5 年的后续内容更新