网站维护怎么做,小程序开发费用清单,wordpress微信登录申请,家装修效果图大全本文旨在向您展示如何快速修复最常见的Java安全代码冲突。 它假定您熟悉代码规则和违规的概念以及Sonar如何对其进行报告。 但是#xff0c;如果您以前从未听说过这些术语#xff0c;则可以阅读Sonar Concepts或即将出版的有关Sonar的书 #xff0c;以获取更详细的解释。 为… 本文旨在向您展示如何快速修复最常见的Java安全代码冲突。 它假定您熟悉代码规则和违规的概念以及Sonar如何对其进行报告。 但是如果您以前从未听说过这些术语则可以阅读Sonar Concepts或即将出版的有关Sonar的书 以获取更详细的解释。 为了获得一个想法在Sonar分析期间您的项目会被许多工具扫描以确保源代码符合您在质量配置文件中创建的规则。 每当违反规则时…就会引发违反。 使用Sonar您可以通过违规深入视图或在源代码编辑器中跟踪这些违规。 有数百条规则根据其重要性进行分类。 在以后的文章中我会尽我所能覆盖尽可能多的内容但现在让我们来看一些常见的安全规则/违规行为。 我们现在要检查两对规则在Sonar中它们都被列为关键。 1.数组直接存储 PMD 方法返回内部数组 PMD 当内部数组存储或直接从方法返回时会出现这些冲突。 以下示例说明了违反这些规则的简单类。 public class CalendarYear {private String[] months;public String[] getMonths() {return months; }public void setMonths(String[] months) {this.months months;}
} 要消除它们您必须在存储/返回它之前克隆Array如以下类实现所示因此没有人可以修改或获取您类的原始数据而只能修改它们的副本。 public class CalendarYear {private String[] months;public String[] getMonths() {return months.clone(); }public void setMonths(String[] months) {this.months months.clone();}
} 2.传递给SQL语句 findbugs 上的execute方法的非恒定字符串并从非恒定String findbugs 生成准备好的语句 使用JDBC库时这两个规则都与数据库访问有关。 通常有两种方法可以通过JDBC连接执行SQL CommantsStatement和PreparedStatement。 关于优缺点有很多讨论但这超出了本文的范围。 让我们看看如何根据以下源代码片段引发第一次违规。 Statement stmt conn.createStatement();
String sqlCommand Select * FROM customers WHERE name custName ;
stmt.execute(sqlCommand); 您已经注意到传递给execute方法的sqlcommand参数是在运行时动态创建的此规则不接受。 类似情况会导致第二次违规。 String sqlCommand insert into customers (id, name) values (?, ?);
Statement stmt conn.prepareStatement(sqlCommand); 您可以通过三种不同的方法来克服此问题。 您可以使用StringBuilder或String.format方法来创建字符串变量的值。 如果适用可以在类声明中将SQL Commands定义为Constant但这仅适用于不需要在运行时更改SQL Command的情况。 让我们使用StringBuilder重新编写第一个代码段 Statement stmt conn.createStatement();
stmt.execute(new StringBuilder(Select FROM customers WHERE name ).append(custName).append().toString()); 并使用String.format Statement stmt conn.createStatement();
String sqlCommand String.format(Select * from customers where name %s, custName);
stmt.execute(sqlCommand); 对于第二个示例您可以仅声明sqlCommand如下所示 private static final SQLCOMMAND insert into customers (id, name) values (?, ?); 还有更多安全规则例如阻止程序Hardcoded常量数据库密码但是我认为没有人仍然在源代码文件中对密码进行硬编码… 在接下来的文章中我将向您展示如何遵守性能和不良实践规则。 在此之前我一直在等待您的意见或建议。 祝您编程愉快别忘了分享 参考在Only Only软件问题博客上从我们的JCG合作伙伴 Papapetrou P. Patroklos 修复了Sonar中常见的Java安全代码冲突 。 翻译自: https://www.javacodegeeks.com/2012/09/fixing-common-java-security-code.html