2019独角兽企业重金招聘Python工程师标准>>>

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(),构造方法:

Java代码

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]);  }
}

 运行结果:

Text代码

原本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

转载于:https://my.oschina.net/jerryhu/blog/286039

findbugs:may expose internal representation by ret相关推荐

  1. FindBugs 恶意代码(may expose internal representation),序列化(defines non-transient non-serializable )错误解决方法

    eclipse插件FindBugs各种bug描述及解决方法 1 )原代码如下: protected String[] a = null; public void test(String[] str){ ...

  2. java.sql.SQLException: Fail to convert to internal representation

        下午,查oracle数据库时遇见这个异常:     java.sql.SQLException: Fail to convert to internal representation 看字面意 ...

  3. 【Findbugs】Findbugs使用指南

    一.简介 Findbugs是一个静态分析工具,它检查类或者jar文件,将字节码与一组缺陷模式进行对比以发现可能的问题.利用这个工具可以在不实际运行程序的情况下对软件进行分析.可以帮助改进代码质量.Fi ...

  4. java uncked_使用FindBugs对SpringSide1.0m3进行分析的结果

    FindBugs是看了ss 论坛上YuLimin的提示,技术活干不了,体力活我来扛 FindBugs : 这里有两篇介绍用法的文章: 结果 找到 bug 总数 50,这里的bug,只是按照FindBu ...

  5. findbugs使用_FindBugs,一个帮你找bug的IDEA插件

    前言 Findbugs很多人都并不陌生,Eclipse中有插件可以帮助查找代码中隐藏的bug,IDEA中也有这款插件.这个插件可以帮助我们查找隐藏的bug,比较重要的功能就是查找潜在的null指针. ...

  6. linux ps stat dls,findbugs 常见问题 及解决方案

    1Bad practice坏的实践 一些不好的实践,下面列举几个:HE:类定义了equals(),却没有hashCode():或类定义了equals(),却使用Object.hashCode():或类 ...

  7. JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD

    s http://sonar.oschina.net/ 在使用sonar服务前,请先登录git.oschina.net(开源中国代码托管网站,以下简称git),请依据如下步骤操作 1.选择自己的项目X ...

  8. IDEA插件之代码质量检查利器 - Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs、SonarLint

    随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失.而为了减少这种情况,其中一种比较好的方式就是提高代码质量 ...

  9. findbugs 相关

    文章目录 0. 当遇到系统中允许该bug出现,但是fingbugs不过时,解决办法 1. 首先配置排除bug的xml文件 2. 在pom.xml指定该配置文件的路径 1. Bug kind and p ...

最新文章

  1. 基于相交线的立体平面SLAM
  2. Numpy入门教程:02. 索引、切片与迭代
  3. opengl版本发展史及各种概念的厘清
  4. 【趋势】未来十年计算机体系结构的历史和趋势
  5. 使用python-nmap模块扫描端口脚本
  6. 从零开始入门 | Kubernetes 中的服务发现与负载均衡
  7. 完全删除垃圾Q+!!!
  8. SqlParameter的作用与用法
  9. Spring是如何校验XML的
  10. 编辑器,webstorm,phpstorm系列配置方法汇总-笔记
  11. 红橙Darren视频笔记 利用阿里巴巴AndFix进行热修复
  12. angularjs 资源集合
  13. 如何做一个有品位的程序员
  14. VC++ 6.0 快捷键
  15. 买硬盘如何避免买到二手翻新的硬盘,ICMAX教你分辨翻新硬盘
  16. 导出的excel添加水印
  17. Spring-01-HelloWorld
  18. 无人船水下地形测量的应用及优势
  19. js爬山之作用域和自由变量~~狂徒李四
  20. 维基百科简体中文语料训练word2vec词向量

热门文章

  1. 你究竟了解多少HTML代码
  2. OpenCV代码提取:Windows上通过DShow获取Camera视频
  3. 设计模式之抽象工厂模式(Abstract Factory)摘录
  4. 【摄像头】低照度和光圈
  5. 【OpenCV】将图像数据由YUV格式转换成JPG格式直接使用,而不保存成文件
  6. nginx http 服务器搭建
  7. ednote服务器运行失败,endnote搜索文献时连不上服务器 Endnote连接服务器问题
  8. layui 数据表格内容过长遮挡_word表格技巧:遇到这三种情况,你会处理么?
  9. 杭电acm1004java答案_水过杭电OJ hdu1004
  10. Java项目:就业管理系统设计和实现(java+springboot+ssm)