在编写代码时,您是否有意识地进行防御性编程,以确保高质量的程序和避免您的代码被恶意利用,例如通过缓冲区溢出攻击或代码注入?您总是会为您的代码应用最低程度的质量标准吗?
我有两种不同的字符串在我的代码中被传递和使用,它们紧密相关但不应该混淆。我认为通过定义两个类来分别表示这两种字符串,虽然它们都是字符串类型,但是它们有不同的名称,这样方法签名和类型不兼容就会强制执行这两种不同字符串的语义意义,以避免错误。同时,我又不想在成百上千的地方对代码进行重构,例如将so...
调用split方法是否可能返回一个空的String[]数组?我很好奇,因为我想尽可能在我的代码中进行保护而不必进行不必要的检查。以下是示例代码:String[] parts = myString.split("\\w"); 在我使用 splitting 后,我需要执行空值检查吗?
最近我在处理FindBugs警告,其中涉及到暴露内部状态的问题,即返回一个数组的引用而不是返回数组的副本。我创建了一些模板来使转换代码更容易。 你创建的支持防御性编程并想与SO社区分享的是哪一个? 迄今为止我创建的模板(作为示例): 创建一个数组副本以从方法中返回: final ${t...
这些天我正在阅读 Joshua Bloch 的《Effective Java》第二版。在第39项中,他提到,如果这些对象后来用于表示类 Foo 的状态,则在给定类 Foo 的构造函数中传递的可变对象的防御性副本是一个好主意。在同样的上下文中,他提到要避免使用非最终类的 clone() 方法,因...
我是来自.NET背景,现在正在涉猎Java。 目前,我在设计API时遇到了防御性地处理错误输入的大问题。假设我有以下代码(足够接近): public void setTokens(Node node, int newTokens) { tokens.put(node, newTok...
对于32位系统的C++开发(无论是Linux、Mac OS还是Windows,PowerPC或x86),我已经初始化了指针,否则它们将是未定义的(例如,它们不能立即获得适当的值),如下所示: int *pInt = reinterpret_cast<int *>(0xDEADBE...
观察 Stack Overflow 上线对我来说是一次很有教育意义的经历。我想列出一个清单,包括针对网站使用的各种漏洞和攻击方式,以及可以用来防御它们的编程技巧。 哪些类型的漏洞? 使网站崩溃 入侵服务器 入侵其他人的登录信息 垃圾邮件 假冒他人身份,利用现实中关系进行欺诈 等等......
我想问你的问题相当广泛,但同时也非常具体。首先,我必须说,我最感兴趣的是适用于 .net 环境的答案。 好吧,我想提高我所编写代码的水平。现在我主要使用 TDD 和静态代码分析来确保我的代码是正确的。最近我听了 Dino Esposito 的关于代码协定的演讲,现在我想将其与其他技术结合使用...
我在一个抛出异常的案例中留下了不可达的break语句,这样做是愚蠢的吗? 从防御性的角度来看,如果逻辑发生改变,我希望它还在那里。 另一方面,我不希望其他开发人员在我的代码上看到编译器警告(“检测到不可到达的代码”)。 switch (someInt) { case 1: ...