findbugs:
1. *** getXXX() may expose internal representation by returning ***.getXXX
2. *** setXXX(DATE )may expose internal representation by storing an externally mutable object into setXXX ***
翻译:
1. getXXX()这个返回数据的方法可能会暴露内部的实现,也就是影响原本对象内部的数据安全。
2. setXXX(DATE)方法这个设置属性值的方法可能会暴露内部的实现,也会影响原本对象内部的数据安全。
分析:
上述findbugs的bug常出现在JavaBean中的setXXX(Object)、getXXX()、构造方法等中,原因都是一个,类似数组、Date等和其他所有java对象一样传递的都是引用,当你外部改变了这些引用值的时候,显然会影响使用这些引用的JavaBean。
解决:
所有的对象型如数组、Date等都人为采用传值(并增加空逻辑判断)。
public Date getDate() { if(date == null) { return null; } return (Date) date.clone(); } public void setDate(Date date) { if(date == null) { this.date = null; }else { this.date = (Date) date.clone(); } }
举例:
一个JavaBean中定义了如下属性和getXXX(),setXXX(),构造方法:
package com.bijian.study; import java.util.Date; import java.util.concurrent.TimeUnit; public class Message { private String[] messages; private Date date; public Message(String[] messages, Date date) { this.messages = messages; this.date = date; } public void setMessages(String[] messages) { this.messages = messages; } public String[] getMessages() { return messages; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } @SuppressWarnings("deprecation") public static void main(String[] args) throws InterruptedException { String[] msg = new String[]{"msg1","msg2"}; Message message = new Message(msg, new Date()); System.out.println("原本date\t"+message.getDate()); /* getXXX() */ Date date2 = message.getDate(); // 获取引用 date2.setHours(2); // 更改引用 System.out.println("getXXX()后\t"+message.getDate()); /* setXXX() */ TimeUnit.SECONDS.sleep(2); Date date3 = new Date(); message.setDate(date3); // 主动更改 System.out.println("主动更改date\t"+message.getDate()); date3.setHours(2); // 更改date3的值,看引用这个值的数据是否会编号 System.out.println("setXXX()后\t"+message.getDate()); /* Constructor() */ System.out.println("\r\n原本message\t"+message.getMessages()[0]); msg[0] = "mofify-msg1"; System.out.println("构造对象的数组来源引用发生改变\t"+message.getMessages()[0]); } }
运行结果:
原本date Mon Nov 25 19:41:10 CST 2013 getXXX()后 Mon Nov 25 02:41:10 CST 2013 主动更改date Mon Nov 25 19:41:12 CST 2013 setXXX()后 Mon Nov 25 02:41:12 CST 2013 原本message msg1 构造对象的数组来源引用发生改变 mofify-msg1
参考:http://stackoverflow.com/questions/8951107/malicious-code-vulnerability-may-expose-internal-representation-by-returning-r
相关推荐
《深入理解FindBugs:可能通过返回暴露内部表示——“NULL”问题分析》 在软件开发过程中,确保代码的质量和安全至关重要。FindBugs作为一款静态代码分析工具,能够帮助开发者在程序运行前发现潜在的问题。本文将...
- **May expose internal representation by returning reference to mutable object**:调用get方法,获得对象属性,获得的对象属性是一个可变的对象。 - **描述**:返回内部可变对象的引用,可能会导致外部实体...
在"findbugs:FindBugs 从 Google 代码的官方存储库中分叉"的标题中,我们可以理解到这个项目已经从Google Code的源代码仓库分离出来,可能迁移到了其他版本控制系统如GitHub或GitLab。 FindBugs通过分析字节码而非...
May expose internal representation by returning reference to mutable object 描述:调用get方法,获得对象属性,获得的对象属性是一个可变的对象; b) 建议处理 Dead store to local variable 描述:对一个局部...
Maven坐标:com.github.stephenc.findbugs:findbugs-annotations:1.3.9-1; 标签:stephenc、github、findbugs、annotations、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index....
置信度级别(sonar.findbugs.confidenceLevel):指定报告问题的置信度阈值(以前称为“优先级”)。 如果设置为“低”,则置信度不用于过滤错误。 如果设置为“中”(默认值),则将置信度低的问题。 如果设置为...
FindBugs是一款著名的静态代码分析工具,主要用于检测Java程序中的潜在错误和不良编程习惯。然而,自该描述提及的信息来看,FindBugs项目已经迁移并更名为SpotBugs。这意味着FindBugs的开发和支持已转移到新的平台,...
sonar自定义规则findbugs插件: 版本:3.11.1 对应soanrqube版本:7.6-8.1都可以使用该版本(即从7.6开始的sonar版本到8.1都可以使用该插件)
mvn findbugs:findbugs target/site/findbugsXml.xml cd ${JENKINS_HOME}/workspace/Check_Findbugs_ExtractPlugin mvn compile mvn findbugs:findbugs mvn checkstyle:checkstyle mvn pmd:pmd target/...
Ant集成FindBugs: 为了将FindBugs集成到开发流程中,开发者通常会利用Apache Ant。Ant是一个基于XML的构建工具,可以灵活地定义任务和目标,用于编译、打包、测试等操作。将FindBugs与Ant结合,可以在构建过程中...
《深入理解FindBugs:Eclipse代码检查工具插件的运用与实践》 在软件开发过程中,代码质量的把控是至关重要的。为了确保代码的健壮性和可维护性,开发者通常会利用各种静态代码分析工具进行检查。FindBugs就是这样...
《深入理解FindBugs 1.3.9:静态代码分析的强大工具》 FindBugs是一款广受欢迎的静态代码分析工具,它的版本1.3.9在软件开发领域具有重要的地位。这款开源工具的主要功能是检测Java代码中的潜在错误,帮助开发者在...
在Maven项目根目录下,运行`mvn findbugs:gui`启动FindBugs GUI。 在FindBugs GUI中: 1. 打开生成的`findbugsXml.xml`文件,查看其中的缺陷列表。 2. 如果没有发现任何问题,那么报告会显示缺陷为0。 3. 如果存在...
《深入理解FindBugs:基于20081008源码的探索》 FindBugs是一款著名的静态代码分析工具,它通过扫描Java字节码来检测潜在的错误和不良编程习惯,被誉为“程序员的无声守护者”。2008年10月08日的版本是FindBugs发展...
《FindBugs:Java代码静态分析工具的深度解析》 FindBugs是一款开源的Java代码静态分析工具,其主要功能是检测源代码中可能存在的错误和潜在问题。这个工具通过扫描字节码来查找可能的问题,而不是运行程序,因此...
《FindBugs:Java代码静态分析利器》 FindBugs是一款强大的开源静态代码分析工具,专用于检测Java程序中的潜在错误和不良编程习惯。在Java开发过程中,FindBugs可以帮助开发者在程序运行前发现可能存在的问题,从而...
在命令行中,你可以使用以下格式运行FindBugs: ``` java -jar path/to/findbugs.jar -textui -v - Effort: max ``` 这里的`<your_class_files_or_jar>`替换为你的Java类文件或JAR包路径。 2. IDE集成 FindBugs...
FindBugs是一款非常知名的静态代码分析工具,它主要用于在Java代码中发现潜在的错误和缺陷。Eclipse是一款广泛使用的集成开发环境(IDE),对于Java开发者来说尤其重要。将FindBugs集成到Eclipse中,可以帮助开发者...
java管理平台源码 README.md 部署 Docker run docker run --name postgresql -p 5432:5432 -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -e POSTGRE_DB=sonar -d ...具体使用可以参考examples