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() {
return (Date) date.clone();
}
public void setDate(Date date) {
this.date = (Date) date.clone();
}
举例:
一个JavaBean中定义了如下属性和getXXX(),setXXX(),构造方法:
package org.futeng.basis.findbugs;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* @version 1.0.0 2013-3-21
* @author ifuteng@qq.com
*/
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[]{"fu","teng"};
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] = "foooooooo";
System.out.println("构造对象的数组来源引用发生改变\t"+message.getMessages()[0]);
}
}
原本date Thu Mar 21 15:18:20 CST 2013
getXXX()后 Thu Mar 21 02:18:20 CST 2013
主动更改date Thu Mar 21 15:18:22 CST 2013
setXXX()后 Thu Mar 21 02:18:22 CST 2013
原本message fu
构造对象的数组来源引用发生改变 foooooooo
参考:
http://stackoverflow.com/questions/8951107/malicious-code-vulnerability-may-expose-internal-representation-by-returning-r
更多:
www.futeng.org
分享到:
相关推荐
- **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