`
futeng
  • 浏览: 260724 次
  • 性别: 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方法,获得对象属性,获得的对象属性是一个可变的对象; b) 建议处理 Dead store to local variable 描述:对一个局部...

    FindBugs JSR305_3.0.2

    FindBugs, Find Bugs in Java Programs. FindBugs requires JRE (or JDK) 1.7.0 or later to run. However, it can analyze programs compiled for any version of Java, from 1.0 to 1.8.

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

    sonar-findbugs:SonarQube的SpotBugs插件

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

    findbugs:FindBugs项目的新家

    FindBugs现在是SpotBugs 。 。 项目开发在这里继续: : 请阅读以下内容以了解详细信息:

    sonar-findbugs-plugin-3.11.1.jar

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

    Eclipse FindBugs

    Eclipse FindBugs:检查你的代码中的一些常见BUG

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

    发现错误 FindBugs 从 Google 代码的官方存储库中分叉

    findbugs 1.3.9 findbugs 1.3.9

    findbugs 1.3.9 findbugs 1.3.9 findbugs 1.3.9 findbugs 1.3.9 findbugs 1.3.9 findbugs 1.3.9

    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

    jsr305-3.0.2-API文档-中文版.zip

    Maven坐标:com.google.code.findbugs:jsr305:3.0.2; 标签:findbugs、jsr305、google、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...

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

    赠送jar包:findbugs-annotations-1.3.9-1.jar; 赠送原API文档:findbugs-annotations-1.3.9-1-javadoc.jar; 赠送源代码:findbugs-annotations-1.3.9-1-sources.jar; 包含翻译后的API文档:findbugs-...

    sonar-findbugs-plugin.jar

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

    jsr305-3.0.2-API文档-中英对照版.zip

    Maven坐标:com.google.code.findbugs:jsr305:3.0.2; 标签:findbugs、jsr305、google、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...

    config:IntelliJ、Eclipse 和 Maven 静态分析配置(Checkstyle、PMD 和 FindBugs)

    包括以下要点: Maven Build:可以使用以下Maven命令自动构建项目: mvn clean install checkstyle: checkstyle pmd: pmd pmd: cpd findbugs: findbugs cobertura: cobertura Eclipse:可以通过m2e Eclipse插件导入...

    findbugs3.0.2插件 myeclipse

    FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具。FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。FindBugs既提供可视化 UI 界面,同时...

    findbugs源码

    FindBugs是一个能静态分析源代码中可能会出现Bug的Eclipse插件工具。FindBugs的设置: 安装好之后,可以通过 Projects > Property > FindBugs标签对其进行设置。设置方法可以根据自己的需要进行调整。 另外在 问题...

Global site tag (gtag.js) - Google Analytics