0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

2020年用Java安全编程的五个原则

汽车玩家 来源:开源中国 作者:白开水不加糖 2020-03-05 14:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一位名为Sam Bocetta的作者发表了一篇文章,针对在2020年使用Java进行编码时应遵循的五个原则进行了研究。他在文中表示,尽管目前Java的安全性相较于一些旧的语言(特别是C和C ++)而言有所长进,但是使用Java编写的代码的漏洞级别还是取决于程序员遵循的最佳实践。

在当今的开发环境中更是如此,各种新的安全性技术、黑客技术以及新颖的存储和加密形式,意味着许多人都在质疑着Java的安全性。Java开发人员还面临着包括云迁移的安全性问题在内的诸多挑战。另一方面,新的安全审核技术(如混沌工程)也为开发人员提供了许多提高代码安全性的机会。

五个原则的具体内容如下:

1. Audit your libraries

首先从基于Java的软件最明显的漏洞源开始:外部库。

使用外部库本身不是问题。在2020年,大多数开发人员的大部分时间确实都花在了与第三方库的合作上。未来随着客户需求的发展,库的类型也会也来越多。因此,重要的是在每次添加新的库的时候,开发人员都要去仔细检查其中的已知漏洞,不能掉以轻心。

审计您的库不仅对安全性有好处。在审核的同时,您可能还会发现其他对性能产生不利影响的问题。并且,如果您要审核的库是开源的,则可以借此机会报告错误并在整个开源社区中建立团队的声誉。

2. Manage Application Secrets

在管理应用程序的secrets时,Java开发人员也养成了一些坏习惯。基本上,社区可以分为两个阵营:那些牺牲安全性以便为用户提供尽可能流畅的软件体验的人,以及那些希望用户花费4个小时为自己的利益输入凭据的人。

实际上,2020年的编码意味着要在安全性和可用性之间取得平衡。对可用性的过多关注通常会导致代码不安全,对安全性的过多关注则意味着用户将会花费大部分时间来尝试规避你采取的安全措施,且他们最终也会成功找到方法。

而在管理应用程序的secrets时,Java开发人员可以从了解CMS平台之间的差异中学到很多东西。因为大多数的CMS平台都具有庞大的用户基础,这意味着其开发人员必须仔细考虑如何管理应用程序的secrets,同时还要保持普通用户的可用性。

3. Use Mature Encryption Libraries

用于加密的库应该比其他类型的库进行审计和分析的频率更高。过去,用于加密的Java库极难使用,其API对普通开发人员的帮助不足。这也就导致了许多Java开发人员开始自己编写加密库。

在此过程中,一些人开始错误地对自己的加密技术产生浓重的自豪感,并对他人编写的代码产生怀疑。而此举并不可取,毕竟一些开发人员一生都在致力于制作不可破解的加密库,他们编写的加密库性能势必要强于大部分人。

用Java进行加密的最好方法则是使用该语言提供的内置工具,重新发明轮子没有任何意义(也存在重大弊端)。

4. Validate Your Inputs

如上所述,2020年的编程很大一部分是确保您的用户不会破坏您精心设计的软件。最简单的方法之一是花费一些时间来验证用户输入。此举不仅能使您的应用程序更安全,也会使得它们更易于使用。

5. Don’t Reinvent the Wheel

最后,一种万能的原则适用于所有语言的所有开发人员:不要自己制作易于使用的版本。

自己制作库的问题在于,晦涩的代码本质上并没有比公开可用的代码更安全。主要原因是开源库在被众人使用的同时,也在被成千上万人检查。因此,其中所存在的漏洞也会很快被发现。

总结

100%的安全是不可能的。确保Java开发中的安全性的关键是,拥有一个用于检查安全漏洞并将其关闭的系统。最重要的是,Java开发人员应该意识到,确保代码安全是一个过程,而不是一个事件。并且,所有地这些问题都需要通过在程序的整个生命周期中进行仔细的审核来解决。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    3006

    浏览量

    116830
  • API
    API
    +关注

    关注

    2

    文章

    2475

    浏览量

    67011
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Java并发编程的“基石”——多线程概念初识

    Java 的内存可见性机制(如 happens-before 原则)能够确保在极端并发下,任何一调度节点看到的集群状态都是一致且准确的,从根本上杜绝了“脑裂”和资源超卖。 其次是 精妙的多线程协同
    发表于 04-16 18:50

    电气设备维修的几项原则

    电气设备维修除了遵守一般的安全规程外,通常遵循以下几项核心原则,以确保人员安全、设备可靠性和维修质量: 安全第一,断电验电原则 维修前必须切
    的头像 发表于 04-15 15:38 122次阅读
    电气设备维修的几项<b class='flag-5'>原则</b>

    微课-掌握Java并发编程的“基石”,入门并发编程

    未来高并发系统底层逻辑:从入门掌握 Java 并发编程基石 在人类商业文明向数字化全面迁移的宏大进程中,有一条隐秘但铁一般的经济学法则正在被无限放大:在算力、存储和网络带宽构成的基础设施之上,系统
    的头像 发表于 04-14 14:25 85次阅读

    预期功能安全是什么?(下)

    设计的核心命题。 未来,SOTIF将从“技术挑战”转变为“竞争壁垒”。谁能更高效地覆盖未知场景、更系统地证明安全性,谁就能在自动驾驶规模化落地的赛道上占据先机。 以上为本次技术分享,后续相关专题文章将持续更新,欢迎关注交流。
    发表于 04-10 11:11

    嵌入式系统安全设计原则

    随着物联网、工业控制和智能设备的普及,嵌入式系统的安全问题越来越突出。一小小的漏洞,就可能导致设备被入侵、数据泄露,甚至对人身安全产生威胁。因此,从设计阶段开始就考虑安全,是每一
    的头像 发表于 01-19 09:06 475次阅读
    嵌入式系统<b class='flag-5'>安全</b>设计<b class='flag-5'>原则</b>

    直供微电网设计中,设备选型的基本原则是什么?

    、运行模式灵活”的特性,需围绕“安全优先、适配场景、经济高效、可靠可控、绿色兼容”大核心导向,建立科学的设备选型原则体系。以下将从大核心原则
    的头像 发表于 01-16 10:12 413次阅读
    直供微电网设计中,设备选型的基本<b class='flag-5'>原则</b>是什么?

    汽车网络安全开发语言选型指南:C/C++/Rust/Java等主流语言对比+Perforce QAC/Klocwork工具支持

    汽车网络安全如何选编程语言?C、C++、Rust、Java……谁更适合AUTOSAR、ISO/SAE 21434?一文了解8种主流语言的优劣与适用场景,以及Perforce QAC/Klocwork对MISRA、CERT等规范的
    的头像 发表于 12-26 11:13 657次阅读
    汽车网络<b class='flag-5'>安全</b>开发语言选型指南:C/C++/Rust/<b class='flag-5'>Java</b>等主流语言对比+Perforce QAC/Klocwork工具支持

    Arm Neoverse CPU上大代码量Java应用的性能测试

    Java 是互联网领域广泛使用的编程语言。Java 应用的一些特性使其性能表现与提前编译的原生应用(例如 C 程序)大相径庭。由于 Java 字节码无法直接在 CPU 上执行,因此通常
    的头像 发表于 11-05 11:25 936次阅读
    Arm Neoverse CPU上大代码量<b class='flag-5'>Java</b>应用的性能测试

    全新ES8领先一代的数字架构,实现安全冗余

    工程语言里,冗余是一种与安全和可靠性密切相关的设计哲学。对于一辆豪华车来说,它的目标从来不是「够用就行」,而是要为一切潜在风险提前留出空间,更高的标准构建安全的底线。   因为车不会永远行驶在春风和煦的平直公
    的头像 发表于 10-12 15:29 3056次阅读

    Java效率提升指南:5Java工具选型建议及Perforce JRebel和XRebel介绍

    企业级Java环境越来越复杂,真正的破局点,可能不在“人”,而在于“工具”。5实用建议,帮你理清Java工具的选型思路。
    的头像 发表于 09-11 13:59 1893次阅读
    <b class='flag-5'>Java</b>效率提升指南:5<b class='flag-5'>个</b><b class='flag-5'>Java</b>工具选型建议及Perforce JRebel和XRebel介绍

    汽车软件开发阶段安全的意义与原则

    上海磐时PANSHI“磐时,做汽车企业的安全智库”好书分享/《一本书读懂智能汽车安全》汽车软件开发阶段安全的意义与原则本文节选自SASETECH汽车
    的头像 发表于 09-05 16:16 1116次阅读
    汽车软件开发阶段<b class='flag-5'>安全</b>的意义与<b class='flag-5'>原则</b>

    隧道施工安全管理系统:构筑隧道施工安全防线隧道大系统

    隧道施工安全管理系统隧道大系统建设隧道人员定位
    的头像 发表于 08-12 12:05 1008次阅读
    隧道施工<b class='flag-5'>安全</b>管理系统:构筑隧道施工<b class='flag-5'>安全</b>防线隧道<b class='flag-5'>五</b>大系统

    伟邦科技电梯无线方对讲系统:告别布线困扰,黑科技守护每一趟电梯安全

    伟邦科技方对讲系统将电梯轿厢内、电梯机房、电梯轿顶、电梯底坑以及物业管理中心(或监控室)紧密相连,构建实时互联的通信网络。若一旦电梯发生故障有人被困,被困人员按下轿厢内的呼叫按钮,求救信号便以毫秒级速度传递至方设备,最极致
    的头像 发表于 08-01 10:29 1278次阅读

    高速PCB布局/布线的原则

    层三、网格中添加过孔避免热点四、路由高速信号135°走线弯曲、增加瓶颈区域外的线距离六、增加菊花链路(避免长存根)七、差分布线原则八、正和负信号间的紧密延迟偏差
    的头像 发表于 05-28 19:34 2669次阅读
    高速PCB布局/布线的<b class='flag-5'>原则</b>

    Java 到 Go:面向对象的巨人与云原生的轻骑兵

    Go 语言在 2009 被 Google 推出,在创建之初便明确提出了“少即是多(Less is more)”的设计原则,强调“以工程效率为核心,极简规则解决复杂问题”。它与 Java
    的头像 发表于 04-25 11:13 749次阅读