SonarQubeJava自定义规则编写分享

更新时间:2023-06-26 16:17:17 阅读: 评论:0

SonarQubeJava⾃定义规则编写分享
背景
当今的⼤部分公司都有对⾃⼰的业务代码进⾏安全性审计的需求,来保证业务代码的安全性,同时代码审计作为SDL中重要的⼀环,可有效保证业务的CIA。但是⼈⼯审计存在严重的性能瓶颈,单纯的使⽤代码扫描器效果也不尽如意,误报问题较多。⽬前较好的⽅法:结合业务,⾃定义规则,结合两者优势。但是⽹上关于这⽅⾯的介绍较少,希望本⽂章能帮助到有需求的同学。选择的扫描为SonarQube,这款扫描器是开源扫描器中较为出⾊的⼀款,有丰富的图像化界⾯和强⼤的语法解析能⼒。
准备⼯作
1. 下载并运⾏SonarQube,具体步骤请参考官⽹教程。
2. 下载sonar-java插件源代码,这也是Java扫描规则集,我们会基于这个规则集编写我们⾃⼰的规则,下载地址:msn翻译
飞行药检sonar-java插件关键结构
钚的读音java-checks模块:该模块包含最重要的JAVA扫描规则集
punchline
java-frontend模块:该模块提供JAVA语法解析类,是该插件的基础
⼀条规则的必要构成
1. java-check中添加⼀条规则
2. java-check test模块中添加测试⽤例
3. java-check resource模块中添加规则描述,包括⼀个html和⼀个json⽂件
4. 在org.sonar.java.checks.CheckList中注册规则
naluone⽰例解析
我们先使⽤java-check中的⼀条扫描规则作为⽰例,先了解下如何编写和注册规则,规则路径如下:
org.sonar.java.checks.spring.RequestMappingMethodPublicCheck
先看规则本体:
package org.sonar.l.maven;
import org.sonar.l.maven.helpers.MavenDependencyCollector;
import org.l.maven.PomCheck;
llect.ImmutableList;
llect.Lists;
import s.lang.StringUtils;
import org.sonar.check.Priority;
import org.sonar.check.Rule;
import org.l.maven.PomCheckContext;
import org.del.LocatedAttribute;
import org.del.maven2.Dependency;
import javax.annotation.Nullable;
import java.util.List;
@Rule(key = "Struts2_S2_057Check")
public class Struts2_S2_057Check implements PomCheck {
@Override
public void scanFile(PomCheckContext context) {
List<Dependency> dependencies = new MavenProject()).allDependencies();
for (Dependency dependency : dependencies) {
LocatedAttribute artifactId = ArtifactId();
LocatedAttribute version = Version();
if (version != null && artifactId != null && "struts2-core".Value()) && !Value())) {                String message = "此版本Struts2包含⾼危漏洞";
baroList<PomCheckContext.Location> condaries = getSecondary(version);
int line = version.startLocation().line();
}
}
}
private static List<PomCheckContext.Location> getSecondary(@Nullable LocatedAttribute systemPath) {
if (systemPath != null && StringUtils.Value())) {
wArrayList(new PomCheckContext.Location("configure check", systemPath));
}
return ImmutableList.of();
}
private static boolean strutsVerCompare(String version){
String StrutsVersion1 = "2.3.35";
String StrutsVersion2 = "2.5.17";
String[] versionArray1 = version.split("\\.");
if(versionArray1[1].equalsIgnoreCa("3")){
if(compareVersion(StrutsVersion1, version) > 0){
return fal;
perform的过去式}
}
if(versionArray1[1].equalsIgnoreCa("5")){
jocelynif(compareVersion(StrutsVersion2, version) > 0){
return fal;
}
}
return true;
}
private static int compareVersion(String version1, String version2){
String[] versionArray1 = version1.split("\\.");
北京unihubString[] versionArray2 = version2.split("\\.");
int idx = 0;
int minLength = Math.min(versionArray1.length, versionArray2.length);
int diff = 0;
while (idx < minLength
&& (diff = versionArray1[idx].length() - versionArray2[idx].length()) == 0
&& (diff = versionArray1[idx].compareTo(versionArray2[idx])) == 0) {
++idx;
}
ozingdiff = (diff != 0) ? diff : versionArray1.length - versionArray2.length;
return diff;

本文发布于:2023-06-26 16:17:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1044920.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:规则   模块   插件   扫描器   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图