`

findbugs:may expose internal representation by returning

阅读更多

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:may expose internal representation by returning

    《深入理解FindBugs:可能通过返回暴露内部表示——“NULL”问题分析》 在软件开发过程中,确保代码的质量和安全至关重要。FindBugs作为一款静态代码分析工具,能够帮助开发者在程序运行前发现潜在的问题。本文将...

    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:FindBugs 从 Google 代码的官方存储库中分叉

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

    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是一款著名的静态代码分析工具,主要用于检测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