`
futeng
  • 浏览: 263043 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

findbugs:may expose internal representation by returning

    博客分类:
  • Java
阅读更多
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
分享到:
评论

相关推荐

    findbugs常见Bug以及处理办法

    - **May expose internal representation by returning reference to mutable object**:调用get方法,获得对象属性,获得的对象属性是一个可变的对象。 - **描述**:返回内部可变对象的引用,可能会导致外部实体...

    findbug 常见异常处理

    May expose internal representation by returning reference to mutable object 描述:调用get方法,获得对象属性,获得的对象属性是一个可变的对象; b) 建议处理 Dead store to local variable 描述:对一个局部...

    findbugs-annotations-1.3.9-1-API文档-中文版.zip

    Maven坐标:com.github.stephenc.findbugs:findbugs-annotations:1.3.9-1; 标签:stephenc、github、findbugs、annotations、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index....

    findbugs:FindBugs 从 Google 代码的官方存储库中分叉

    在"findbugs:FindBugs 从 Google 代码的官方存储库中分叉"的标题中,我们可以理解到这个项目已经从Google Code的源代码仓库分离出来,可能迁移到了其他版本控制系统如GitHub或GitLab。 FindBugs通过分析字节码而非...

    sonar-findbugs:SonarQube的SpotBugs插件

    置信度级别(sonar.findbugs.confidenceLevel):指定报告问题的置信度阈值(以前称为“优先级”)。 如果设置为“低”,则置信度不用于过滤错误。 如果设置为“中”(默认值),则将置信度低的问题。 如果设置为...

    findbugs:FindBugs项目的新家

    FindBugs是一款著名的静态代码分析工具,主要用于检测Java程序中的潜在错误和不良编程习惯。然而,自该描述提及的信息来看,FindBugs项目已经迁移并更名为SpotBugs。这意味着FindBugs的开发和支持已转移到新的平台,...

    sonar-findbugs-plugin-3.11.1.jar

    sonar自定义规则findbugs插件: 版本:3.11.1 对应soanrqube版本:7.6-8.1都可以使用该版本(即从7.6开始的sonar版本到8.1都可以使用该插件)

    Jenkins 与findbugs集成

    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/...

    findbugs + ant

    Ant集成FindBugs: 为了将FindBugs集成到开发流程中,开发者通常会利用Apache Ant。Ant是一个基于XML的构建工具,可以灵活地定义任务和目标,用于编译、打包、测试等操作。将FindBugs与Ant结合,可以在构建过程中...

    代码检查工具findbugs插件

    《深入理解FindBugs:Eclipse代码检查工具插件的运用与实践》 在软件开发过程中,代码质量的把控是至关重要的。为了确保代码的健壮性和可维护性,开发者通常会利用各种静态代码分析工具进行检查。FindBugs就是这样...

    findbugs 1.3.9 findbugs 1.3.9

    《深入理解FindBugs 1.3.9:静态代码分析的强大工具》 FindBugs是一款广受欢迎的静态代码分析工具,它的版本1.3.9在软件开发领域具有重要的地位。这款开源工具的主要功能是检测Java代码中的潜在错误,帮助开发者在...

    findbugs插件使用文档

    在Maven项目根目录下,运行`mvn findbugs:gui`启动FindBugs GUI。 在FindBugs GUI中: 1. 打开生成的`findbugsXml.xml`文件,查看其中的缺陷列表。 2. 如果没有发现任何问题,那么报告会显示缺陷为0。 3. 如果存在...

    findbugs最新源代码20081008版本的

    《深入理解FindBugs:基于20081008源码的探索》 FindBugs是一款著名的静态代码分析工具,它通过扫描Java字节码来检测潜在的错误和不良编程习惯,被誉为“程序员的无声守护者”。2008年10月08日的版本是FindBugs发展...

    findbugs-1.3.9.rar

    《FindBugs:Java代码静态分析工具的深度解析》 FindBugs是一款开源的Java代码静态分析工具,其主要功能是检测源代码中可能存在的错误和潜在问题。这个工具通过扫描字节码来查找可能的问题,而不是运行程序,因此...

    findbugs-1.3.7.zip

    《FindBugs:Java代码静态分析利器》 FindBugs是一款强大的开源静态代码分析工具,专用于检测Java程序中的潜在错误和不良编程习惯。在Java开发过程中,FindBugs可以帮助开发者在程序运行前发现可能存在的问题,从而...

    FindBugs安装与使用说明

    在命令行中,你可以使用以下格式运行FindBugs: ``` java -jar path/to/findbugs.jar -textui -v - Effort: max ``` 这里的`<your_class_files_or_jar>`替换为你的Java类文件或JAR包路径。 2. IDE集成 FindBugs...

    findbugs.jar+findbugs-ant.jar

    FindBugs是一款非常知名的静态代码分析工具,它主要用于在Java代码中发现潜在的错误和缺陷。Eclipse是一款广泛使用的集成开发环境(IDE),对于Java开发者来说尤其重要。将FindBugs集成到Eclipse中,可以帮助开发者...

    java管理平台源码-findbugs:Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量可以通过插

    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

Global site tag (gtag.js) - Google Analytics