findbugs:may expose internal representation by ret
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相关推荐
- FindBugs 恶意代码(may expose internal representation),序列化(defines non-transient non-serializable )错误解决方法
eclipse插件FindBugs各种bug描述及解决方法 1 )原代码如下: protected String[] a = null; public void test(String[] str){ ...
- java.sql.SQLException: Fail to convert to internal representation
下午,查oracle数据库时遇见这个异常: java.sql.SQLException: Fail to convert to internal representation 看字面意 ...
- 【Findbugs】Findbugs使用指南
一.简介 Findbugs是一个静态分析工具,它检查类或者jar文件,将字节码与一组缺陷模式进行对比以发现可能的问题.利用这个工具可以在不实际运行程序的情况下对软件进行分析.可以帮助改进代码质量.Fi ...
- java uncked_使用FindBugs对SpringSide1.0m3进行分析的结果
FindBugs是看了ss 论坛上YuLimin的提示,技术活干不了,体力活我来扛 FindBugs : 这里有两篇介绍用法的文章: 结果 找到 bug 总数 50,这里的bug,只是按照FindBu ...
- findbugs使用_FindBugs,一个帮你找bug的IDEA插件
前言 Findbugs很多人都并不陌生,Eclipse中有插件可以帮助查找代码中隐藏的bug,IDEA中也有这款插件.这个插件可以帮助我们查找隐藏的bug,比较重要的功能就是查找潜在的null指针. ...
- linux ps stat dls,findbugs 常见问题 及解决方案
1Bad practice坏的实践 一些不好的实践,下面列举几个:HE:类定义了equals(),却没有hashCode():或类定义了equals(),却使用Object.hashCode():或类 ...
- JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
s http://sonar.oschina.net/ 在使用sonar服务前,请先登录git.oschina.net(开源中国代码托管网站,以下简称git),请依据如下步骤操作 1.选择自己的项目X ...
- IDEA插件之代码质量检查利器 - Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs、SonarLint
随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失.而为了减少这种情况,其中一种比较好的方式就是提高代码质量 ...
- findbugs 相关
文章目录 0. 当遇到系统中允许该bug出现,但是fingbugs不过时,解决办法 1. 首先配置排除bug的xml文件 2. 在pom.xml指定该配置文件的路径 1. Bug kind and p ...
最新文章
- 基于相交线的立体平面SLAM
- Numpy入门教程:02. 索引、切片与迭代
- opengl版本发展史及各种概念的厘清
- 【趋势】未来十年计算机体系结构的历史和趋势
- 使用python-nmap模块扫描端口脚本
- 从零开始入门 | Kubernetes 中的服务发现与负载均衡
- 完全删除垃圾Q+!!!
- SqlParameter的作用与用法
- Spring是如何校验XML的
- 编辑器,webstorm,phpstorm系列配置方法汇总-笔记
- 红橙Darren视频笔记 利用阿里巴巴AndFix进行热修复
- angularjs 资源集合
- 如何做一个有品位的程序员
- VC++ 6.0 快捷键
- 买硬盘如何避免买到二手翻新的硬盘,ICMAX教你分辨翻新硬盘
- 导出的excel添加水印
- Spring-01-HelloWorld
- 无人船水下地形测量的应用及优势
- js爬山之作用域和自由变量~~狂徒李四
- 维基百科简体中文语料训练word2vec词向量
热门文章
- 你究竟了解多少HTML代码
- OpenCV代码提取:Windows上通过DShow获取Camera视频
- 设计模式之抽象工厂模式(Abstract Factory)摘录
- 【摄像头】低照度和光圈
- 【OpenCV】将图像数据由YUV格式转换成JPG格式直接使用,而不保存成文件
- nginx http 服务器搭建
- ednote服务器运行失败,endnote搜索文献时连不上服务器 Endnote连接服务器问题
- layui 数据表格内容过长遮挡_word表格技巧:遇到这三种情况,你会处理么?
- 杭电acm1004java答案_水过杭电OJ hdu1004
- Java项目:就业管理系统设计和实现(java+springboot+ssm)