java java编码_作者问答:Java编码准则

java java编码

大多数开发人员都认为有必要编写安全代码,但通常会发现交付某些产品的压力可能会限制他们这样做的能力。 其他人可能只是不知道从哪里开始。 无论哪种情况,都有一个既定的指南对改进他们的方法很有用。

InfoQ有机会与Java Coding Guidelines的作者交谈,讨论他们的新书如何帮助开发人员编写更好的代码,并提供有关查找内容的有用指南。

InfoQ:许多开发人员可能希望提高与安全性相关的代码质量,但可能不知道从哪里开始。 另一位开发人员可能认为他们在理论上很出色,但是他们却坚持使用遗留代码库。 您会对那些来自不同情况的程序员说些什么?

作者:您如何使用本书很大程度上取决于您的工作。 如果您刚开始Java软件开发过程,则可能需要通读一遍,以获得本指南的要旨。 然后,在开始开发系统时,可以回过头来查看有关准则的应用的个别准则。

另一方面,如果要维护现有系统,则可能需要查看准则,直到找到“令人惊讶”的准则,再查看代码以查看是否存在问题,然后根据需要参考准则。补救策略。

InfoQ: 看书时,内容分为安全性,防御性编程,可靠性,程序易懂性和程序员的误解。 其中,您认为最需要编程的地方是什么?

作者: Java编码指南的主要目的是帮助程序员在面对特定编程概念,构造或语言功能的正确应用存在不确定性时做出明智的选择。 程序员的误解解决了“什么是常见的误解?”这一特定问题。 程序可理解性在确保代码没有歧义且因此易于维护方面大有帮助。 “安全性”,“防御性编程”和“可靠性”章节灌输了构建可抵抗攻击或故障的强大系统的需求。

InfoQ:您的书与 CERT Oracle Java安全编码标准有 什么关系? 阅读该指南后或结合使用该指南

作者: Java的CERT Oracle安全编码标准定义了Java安全编码规则,如果违反这些规则,可能会导致可利用的漏洞。 Java Coding Guidelines包含的建议通常应可提高软件的安全性和可靠性,尽管对这些建议的任何特定违反均不表示代码中存在缺陷。 最好同时使用这两本书,因为它们提供了独立的指导,您会发现两本书之间几乎没有重叠。 大多数准则都提供了要遵循的通用编码原则,而编码标准列举了要避免的错误。 Java编码指南包括对Java 的CERT Oracle安全编码标准的引用,但其编写目的是使其自成体系。

InfoQ:目前有什么工具可以自动扫描这些类型的错误的代码? 自动工具是否可以代替程序员熟悉这些概念的需要?

作者:程序员应该熟悉Java Coding Guidelines中的概念,因为避免在开发过程中引入代码中的缺陷和漏洞比在测试过程中发现或补救它们(或更糟的是在部署之后)要容易得多。 现有的大多数分析都是不完善和不完整的,这意味着这些分析可能分别导致假阴性和假阳性。 因此,开发人员必须能够确定工具发出的诊断是否违反规则,并且还必须避免或消除其他未诊断的违反行为。 CERT创建了源代码分析实验室(SCALe),该实验室使用各种静态分析器来评估代码是否违反安全编码规则。 这些工具中许多都具有非重叠功能,因此有必要使用多种工具来获得广泛的覆盖范围。 SCALe流程仅是部分自动化的; 人类分析人员仍然需要检查诊断以消除误报。

InfoQ:您是否看到团队将一个人划为“安全人”? 整个团队是否应该对安全主题保持熟悉?

作者:如果整个团队都了解安全编码,那就更好了。 每个编写代码的人都需要知道如何安全地编码,因为正确编写代码的最佳时间是在编写代码时。 如果团队中的一个人接受了额外的安全培训,则可以通过使用代码检查和安全审核来有效地传播此信息。 开发团队需要致力于开发一致的代码,这些代码可以作为参考。 开发人员还可以通过我们的时事通讯和我们的LinkedIn安全编码论坛,在www.securecoding.cert.org上参与和/或关注我们的编码标准的发展。

InfoQ:您是否经常重复看到特定的错误?

作者: Java中经常发生一些特定的错误,因为该语言在如何应用编程结构方面提供了很大的自由度。 例如,为了绕过Java提供的异常处理功能,安全编码规则ERR-08-J 不要捕获NullPointerException或经常违反其任何祖先 。 代码中的catch或throw语句过于宽泛,经常会导致错误被静默忽略。 异常处理仍然是一个充满挑战的领域,因为许多Java应用程序和Web框架将处理异常和失败方案的责任交到了开发人员手中。

CERT分析Java软件系统是否符合CERT Oracle Java安全编码标准。 我们记录的主要违反规则是:

答:EXP01-J。 永远不要取消引用空指针

B.ERR01-J。 不允许例外公开敏感信息

C.ERR07-J。 不要抛出RuntimeException,Exception或Throwable

D.ERR08-J。 不要捕获NullPointerException或其任何祖先

E.FIO04-J。 在不再需要时释放资源

F.ERR00-J。 不要抑制或忽略检查的异常

翻译自: https://www.infoq.com/articles/java_coding_guidelines-interview/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

java java编码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值