SonarQube检测出的bug漏洞以及异味的修复整理腾讯云开发者社区

if分支中不能出现两个分支一样的情况。

把重复的删除掉就可以了。

提示资源没有关闭,需要在finally中进行资源关闭,但是把资源关闭放到finally中由提示这样写不规范有异味。所以它推荐的写法是将创建资源流的代码放在try()中,这样系统会自动的关闭资源,不需要我们写.close()方法,如图

这种提示是指可能存在空指针异常,需要增加空值检测。

这里提示的是在进行操作运算之前应该先进行类型转换。下面是他提供的一些规范和不规范的实例。

可以看出来,基本上是给提示的参数进行强类型转换,怎么知道应该转换什么类型呢,可以点击对应的方法查看这个参数是什么类型的,就将这个参数强转成这个类型就好了,比如上面的doubleTostring()方法的第二个参数是double类型的,所以强转一下就好了,如下:

提示是删除或纠正这种无用的自我分配。一看上面的代码,因该是哪位大佬写错了吧,所以改成temp2[i]=temp1[i];也算消除了异味

7.Saveandre-usethis“Random”.

这种提示是随机数应该需要重用,然后他给出的参考是这样的

在类中定义一个Random,然后在方法中可以重复使用,但是我按照这个方法试了一下没发现并不可行,导入下面的两个包都会报错,应该是需要什么额外的jar包才行感觉。

所以做了一个消除bug的方法。如下图,其实感觉变复杂了哈哈,但是消除了bug

上面代码都是报这个bug,提示不应该按照名称来比较类。不要求类名是唯一的,只要它们在包中是唯一的。因此,尝试根据类名确定对象的类型是一种充满危险的练习。其中一个危险是恶意用户将发送与受信任类同名的对象,从而获得可信访问。相反,应该使用instanceof运算符或Class.isAssignableFrom()方法来检查对象的基础类型。下面我是通过isAssignableFrom()来消除bug的。如下图:

提示原始字节值不应与逐位运算结合使用,读取字节以构建其他原始值(如整数或长整数)时,将自动提升字节值,但该提升可能会产生意外结果。要防止此类意外值转换,请使用按位和(&)将字节值与0xff(255)组合,然后关闭所有较高位。所以在后面就加上“&0xff”如图:

提示非线程安全字段不应该是静态的,所以把前面的static修饰符去掉就可以。

这种interrupt异常,需要在catch中加上Thread.currentThread().interrupt();

提示是这个Integer封装是多余的,所以直接用强类型转换就可以吧。

这个提示用其他的方式初始化,不要在定义的时候就初始化,修改如下:

遇到的基本上就是这些bug了,还有css中的一些bug,按照提示修改的

将这两个body的样式合二为一,可以消除bug和漏洞

Display重复了,删除掉一个。

空样式,直接删除掉。

(更改此条件,以便它不总是评估为“false")这是很多webservice文件中出现的一个bug。如果后期会对webservice文件过滤,这个就可以不管了。不过也可以把这行删除掉,obj不可能为nullif(obj==null)returnfalse;这样这个bug也没有了。

这种提示就是异常应该用日志打印出来。

提示密码不能直接这样传递,不安全。但是也没有提供参考的案例。所以我是这样的改的,也能消除漏洞。如下图:

类变量字段不应具有公共可访问性。所以把public访问修饰符,改成其他的修饰符,最好是private.

提示应该保护XML变换器。创建javax.xml.transform.Transformer但未启用“安全处理”或创建一个而不禁用外部DTD时,可能会发生XML外部实体或XSLT外部实体(XXE)漏洞。如果该外部实体被攻击者劫持,则可能导致机密数据泄露,拒绝服务,服务器端请求伪造,从解析器所在机器的角度进行端口扫描,以及其他系统影响。进行修改如下可以消除漏洞:

提示当包含操作状态代码时,不应忽略返回值。也就是说不应该忽略文件删除操作的结果。所以进行如下修改,但是如下修改虽然修复了漏洞,但是新增了异味。

异味提示"java.nio.Files#delete"shouldbepreferred(squid:S4042)。应该使用Files.delete()方法,而不能之间文件delete.所以最后修改成:

这种“publicstatic”字段应该成员变量应该是不变的,所以需要加上final修饰,如下:

还有几种漏洞不好修复,暂时没有思路

这种提示,TrustManagers不应盲目接受任何证书。通常会创建X509TrustManager接口的空实现,以允许连接到未由根证书颁发机构签名的主机。这样的实现将接受任何证书,这使得应用程序容易受到中间人攻击。正确的解决方案是提供适当的信任存储。

这种原来用DES加密的提示不应使用DES(数据加密标准)和DESede(3DES)。它推荐的使用AES.但是将DES加密改成AES加密虽然程序异味消除了,但是程序肯定不对吧,加密方式换了肯定会出问题的吧。

异味太多了,我也没有消除太多了异味,一个项目异味一般都是好几k,所以消除起来一两个异味对基数没有什么影响,并且异味太多,消除一部分后,并没有感受到那种异味数量巨减的感觉,导致消除异味的积极性不是很高。并且有的异味是真的不好消除,有时候打开一个文件,几千行代码一片都是标异味。直接就放弃了。

swatch中没有default,也没有break;虽然上面的代码不要break也不会有什么问题。但是万一哪天变了,不是return就很容易出错了吧。

两个分号,代码中有很多地方有这种情况感觉,删掉多余的。

上图,定义的变量但是没有使用,就会抛出这种异味,解决这种异味,是需要看看这个变量有什么作用,没有作用的可以删除掉,如果不改随意改动,可以在他们下面增加一条日志打印他们,这样也能消除这个异味。

String.valueOf()不应附加到String。这里我的理解是,result是string类型,arerType是int类型,在拼接的时候会自动的将int类型转换成string,不用多此一举。

类似这种,当一个不变的字符串在一个文件中多次出现,就应该给这些字符串提取成常量,这样方便以后修改和维护。但是说实话提取常量这个异味真的很枯燥,并且代码中有大量的这种情况,感觉每个项目或者每个模块都应该提取一个常量类,这样这个模块用到这些不变字符串,就直接从这个类中获取,但是这个工作量有点大哈哈,我就简单的尝试了一下,把自定义报表那部分提取常量,但是进行了一部分就没有进行下去了,枯燥且工作量大

但是我觉得这个工作还是做比较好,这样便于以后的维护,常量值改变只用改一个地方就好了,不用所有地方都修改。

当字符串需要频繁变化时,用stringBuilder代替string.这里还有一种异味是代码中有的地方用的是StringBuffer,也需要转成StringBuilder.因为Stringbuffer是确保线程安全的,stringBuilder不用,所以stringBuilder效率更高。那会不会引发线程安全问题呢,不会,因为这个是在方法内部定义的变量,所以对这个方法而言是线程封闭的,不会引发线程安全问题。

提示修饰符的顺序应该符合java语言规范,它给出的参考如下:

所以把static修饰符放到final就好了。

定义变量的时候,一个变量一行,便于查看

最好不要直接返回null,应返回空数组和集合.如下:

判断集合时候为空是,不要使用size(),建议使用isEmpty()方法。如下:

这种可以直接删除掉,或者不想删除的可以用/***/注释,对于单行的可以把后面的分号去掉就不会报错异味了。

布尔文字不应该是多余的。用true或者false在if中判断是不好的写好,直接可以通过本身进行判断,如下:

如果一个类的里面的方法都是static修饰的静态方法,那么需要给这个类定义一个非公共构造函数(添加私有构造函数以隐藏隐式公共构造函数)如下:

关于代码圈复杂度大于15的异味,以及代码过长的异味,说实话也没有什么好的方法,只能读代码,然后抽离函数出来,当然抽离函数不可能一次就能做到代码简洁之道要求的那样,一个函数只做一件事,单一层次原则。但是我们也不能因为做不到这样就就什么都不做,还是要迈出这一步,先抽离函数,虽然没有做到单一层次原则,但是消除了异味。下面代码是对上面的进行简单的函数抽离,消除异味

这样代码上看去显得非常的臃肿且感觉特别low,但是这却是我们最喜欢写的包括我自己,因为简单进本不用思考。并且如下图,18个case都没有报异味,所以SonarQube上也没有检查出来,所以大家都将就先改其他,后来被数据端同事看到了下面这个代码,说代码简洁之道不是说不能用这么多的swatch么?我竟然一时不知道怎么回答,只能说修改成本太大,不好改。但是事后自己仔细想想自己接受这段代码看的也感觉特别low,那自己为什么不能对自己的要求高一点呢,所以痛定思痛打算改这段代码。

我修改这部分代码采用的是枚举类型,先创建一个枚举,并将所有的case换成对应的枚举值,然后创建两个成员变量和一个带两个参数的枚举的构造方法。然后实现这两个成员变量的get方法,使得其他类可以访问。如下图:

然后在原来的swatch的代码中,删除这些分支,创建这个枚举,并根据分支创建对应的枚举值,如下:

这样就完成啦,看起来总算比那么多的swatch-case舒服很多吧,并且也没有那么low了。

两个分支一模一样的,需要删掉其中一个。然后像这种有很多if-elseif的getsql()方法的圈复杂度肯定是超过了,这里比较好的方法我也不知道怎么做,但是我是将整个分成多个一样的if-elseif的方法。但是这样只能消除异味,代码的可读性变差。

THE END
1.命令执行漏洞全面解析对于Windows 系统,可以尝试执行ping -n 1 [攻击者IP] > nul && [恶意命令](利用 ping 命令的特性来执行其他命令)。 四、常用工具 Burp Suite 功能强大的 Web 应用程序安全测试工具。可以拦截、修改和重放 HTTP 请求,方便测试各种输入参数是否存在命令执行漏洞。其 Intruder 模块可以进行自动化的参数爆破和测试。https://blog.csdn.net/m0_57836225/article/details/144331272
2.什么是网络安全漏洞?无障碍 关怀版 登录 视频加载失败,可以 刷新 试试 00:00/00:00 评论 还没有人评论过,快来抢首评 发布什么是网络安全漏洞?五湖联技术服务公司 发布于:广东省 2024.12.04 10:05 +1 首赞 收藏 什么是网络安全漏洞? 推荐视频 已经到底了 热门视频 已经到底了 https://news.sohu.com/a/833045049_121703426
3.网络安全与信息安全:关于网络安全漏洞加密技术安全意识等方面简介:随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。 http://help.jaozi.cn/?article/1643955
4.bug英文解释相关内容简介介绍(bug的英文意思)1、定义和起源:漏洞(bug)是指在计算机软件或电子系统中存在的错误、故障或缺陷。 2、BUG作为一个英文单词,本意是指昆虫、小虫、损坏、缺陷、窃听器等意思。 3、隐藏着的一些未被发现的缺陷或问题统称为bug漏洞由于现代社会的发展,bug另有一种引申意义,用来形容某事物厉害的超乎想象,BUG可以使电脑系统崩溃容易被施http://www.06567.cn/tgzt/741350.html
5.常说的“漏洞”是怎么来的?常说的“漏洞”是怎么来的? 漏洞是指一个系统存在的弱点或缺陷,它可能来自应用软件或操作系统设计时的缺陷或编码时产生的错误,也可能来自业务在交互处理过程中存在的设计缺陷或不合理逻辑流程。“漏洞”可能导致攻击者能够在未授权的情况下访问或破坏系统,出现安全隐患。http://center.jsnu.edu.cn/77/39/c17928a358201/page.htm
6.外贸领域内的廉政警示,致领导与同事的严正呼吁外贸偷的定义及危害 外贸偷的成因 应对外贸偷的措施 大家好!我站在这里,非常荣幸能和大家共同探讨一个与我们息息相关的话题——《外贸偷》,近年来,随着我国经济的快速发展,外贸行业在我国国民经济中的地位日益重要,与此同时,外贸偷现象也日益凸显,严重影响了我国外贸行业的健康发展,在此,我将从以下几个方面来谈谈https://smmailuo.com/post/20180.html
7.长沙湘潭株洲骚扰电话是什么原因造成的三、骚扰 的成因分析 3.1 法律监管不严 尽管国家对骚扰 的监管政策日益完善,但在实施过程中仍存在一定的漏洞。一些 营销公司通过模糊的法律界限,逃避监管,导致骚扰 屡禁不绝。 3.2 市场需求驱动 随着经济的发展,许多企业希望通过 营销来拓展市场,增加销量。这种市场需求使得一些企业不惜采用不正当手段进行 推销,导致骚http://www.nntv.cn/ganhaofalv/tingxifq/6071.html
8.中国宏观杠杆率的现状成因化解与影响WE言堂WE言堂防范化解重大风险是三大攻坚战之首。本文旨在分析中国宏观杠杆率的总量、结构、现状、成因、趋势、化解及影响。 摘要: 1、从总量看,当前中国宏观杠杆率总水平较高,主因2008年国际金融危机之后杠杆率上升过快所致。但自2016年中以来,中国非金融部门总杠杆率上升趋势明显放缓,尤其是非金融企业部门杠杆率出现了显著下降。https://www.p5w.net/weyt/201801/t20180107_2058214.htm
9.测绘科普由于影响遥感影像解译、判读的因子很多,也很复杂,需要进行主成因分析,在不影响正确判断的前提下,可适当舍弃某些次要因子,简化遥感信息模型、降低模型建立的难度。 遥感信息模型在遥感影像解译的应用,可大大提高数据采集速度,减少人工解译和采集的工作量。遥感信息模型是遥感信息的自动解译和提取的基础,也是地理信息系统http://www.shandongcehui.cn/wsfw/chkp/201912/t20191203_2466480.html
10.iOS安全攻与防(总篇)四、账号1在查询自己订单时将订单参数OrderId替换为账号2的值即可查询账号2的订单 图片44 在查询账号1随访记录时通过拦截数据包修改Id参数为账号2的对应的值即可实现越权查询 图片45 越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。大多数应用程序在https://www.jianshu.com/p/561fec0caa01