首页 > 其他分享 >Sonarqube,标识代码中的username/password关键字,分别使用Tree.Kind.STRING_LITERAL 、Tree.Kind.IDENTIFIER、Tree.Kind.TE

Sonarqube,标识代码中的username/password关键字,分别使用Tree.Kind.STRING_LITERAL 、Tree.Kind.IDENTIFIER、Tree.Kind.TE

时间:2024-08-19 14:15:12浏览次数:4  
标签:username Kind java Tree org sonar import

关于Tree.Kind.STRING_LITERAL 、Tree.Kind.IDENTIFIER、Tree.Kind.TEXT_BLOCK等各个区别,请参考:

Tree.Kind.STRING_LITERAL 、Tree.Kind.IDENTIFIER、Tree.Kind.TEXT_BLOCK 区别 - yxchun - 博客园 (cnblogs.com)

 

1、使用 Tree.Kind.STRING_LITERAL 

package org.sonar.samples.java.checks;

import org.sonar.check.Rule;
import org.sonar.plugins.java.api.IssuableSubscriptionVisitor;
import org.sonar.plugins.java.api.JavaFileScanner;

import org.sonar.plugins.java.api.tree.LiteralTree;
import org.sonar.plugins.java.api.tree.Tree;

import java.util.Arrays;
import java.util.List;

@Rule(key = "HardcodedSensitiveInfo2Rule")
public class HardcodedSensitiveInfo2Rule extends IssuableSubscriptionVisitor implements JavaFileScanner {

  private static final List<String> SENSITIVE_KEYWORDS = Arrays.asList("username", "password");

  @Override
  public List<Tree.Kind> nodesToVisit() {
    return Arrays.asList(Tree.Kind.STRING_LITERAL);
  }

  @Override
  public void visitNode(Tree tree) {

    if (tree.is(Tree.Kind.STRING_LITERAL)) {

      LiteralTree stringLiteral = (LiteralTree) tree;

        String value = stringLiteral.value().toLowerCase();
        for (String keyword : SENSITIVE_KEYWORDS) {
          if (value.contains(keyword)) {
            reportIssue(tree, "Avoid hardcoding sensitive information such as " + keyword);
          }
        }
      }

    }
    
}

2、使用Tree.Kind.IDENTIFIER

package org.sonar.samples.java.checks;

import org.sonar.check.Rule;
import org.sonar.plugins.java.api.JavaFileScanner;
import org.sonar.plugins.java.api.JavaFileScannerContext;
import org.sonar.plugins.java.api.tree.IdentifierTree;
import org.sonar.plugins.java.api.tree.Tree;
import org.sonar.plugins.java.api.tree.LiteralTree;
import org.sonar.plugins.java.api.IssuableSubscriptionVisitor;

import java.util.Collections;
import java.util.List;
import java.util.Arrays;

@Rule(key = "HardcodedSensitiveInfoRule")
public class HardcodedSensitiveInfoRule extends IssuableSubscriptionVisitor implements JavaFileScanner {

  @Override
  public List<Tree.Kind> nodesToVisit() {
    return Collections.singletonList(Tree.Kind.IDENTIFIER);
  }

  @Override
  public void visitNode(Tree tree) {
    IdentifierTree identifier = (IdentifierTree) tree;
    String value=identifier.name().toLowerCase();
    if (value.contains("username")||value.contains("password")) {
      reportIssue(identifier, "Hardcoding sensitive : Method or parameter, Identifier name should not contain 'username' or 'password'.");
    }
  }
}

 

3、使用Tree.Kind.TEXT_BLOCK

package org.sonar.samples.java.checks;

import org.sonar.check.Rule;
import org.sonar.plugins.java.api.IssuableSubscriptionVisitor;
import org.sonar.plugins.java.api.tree.LiteralTree;
import org.sonar.plugins.java.api.tree.Tree;
import org.sonar.plugins.java.api.tree.Tree.Kind;

import java.util.Collections;
import java.util.List;

@Rule(key = "MyTxtBlockCheck")
public class MyTxtBlockCheck extends IssuableSubscriptionVisitor {


  @Override
  public List<Kind> nodesToVisit() {

    return Collections.singletonList(Kind.TEXT_BLOCK);
  }

  @Override
  public void visitNode(Tree tree) {

    if (tree.is(Kind.TEXT_BLOCK)) {
      LiteralTree textBlock = (LiteralTree) tree;
      String value = textBlock.value().toLowerCase();
      if (value.contains("username") || value.contains("password")) {
        reportIssue(tree, "Sensitive information detected: 'username' or 'password'.");
      }
    }

  }


}

 

标签:username,Kind,java,Tree,org,sonar,import
From: https://www.cnblogs.com/ychun/p/18367213

相关文章

  • sonarqube添加一条自定义规则,扫描文件中出现的username和password,方法一
    下载源码与使用详情参考:Sonarqube自定义规则,部署SonarSource/sonar-java源码中示例规则:docs/java-custom-rules-example-yxchun-博客园(cnblogs.com)假设你已经有了sonarqube-java源码,并且已经把sonarqube部署到电脑上1、在check里面创建文件 MyTxtBlockCheck.javap......
  • Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.s
    环境:JDK21问题原因是Lombok,与JDK21兼容的最低Lombok版本是1.18.30,最小的SpringBoot版本是3.1.4。解决:将lombook版本改为1.18.30<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lomb......
  • [LeetCode] 1367. Linked List in Binary Tree 二叉树中的链表
    Givenabinarytree root anda linkedlistwith head asthefirstnode.ReturnTrueifalltheelementsinthelinkedliststartingfromthe head correspondtosome downwardpath connectedinthebinarytree otherwisereturnFalse.Inthiscontext......
  • UsbTreeView 查看USB端口模式(速率)
    USB版本和对应速度USB1.1USB2.0FullSpeed12MbpsUSB2.0USB2.0High-Speed480MbpsUSB3.0USB3.1Gen1USB3.2Gen15GbpsUSB3.1USB3.1Gen2USB3.2Gen210GbpsUSB3.2USB3.2Gen2x220GbUSB3.2Gen1和USB3.2Gen2拥有USBTYPE-A、USBTYPE-B......
  • 详解WizTree:一款企业级信赖的磁盘空间管理利器!
    前言你是否曾为电脑里那些“不速之客”而烦恼?那些占用大量空间,却又不知所踪的文件和文件夹,是不是让你倍感头疼?今天小江湖就介绍一款超级给力的神器——WizTree! 它就像是电脑空间管理领域的超级侦探,能够迅速而准确地找出你硬盘上的“空间吸血鬼”;无论它们藏得多深,多隐蔽,都......
  • TreeSet
    importlombok.*;importorg.junit.jupiter.api.Test;importjava.util.*;/*Comparable是对象自身的比较方式,而Comparator是外部定义的比较方式。**/publicclassT{//Comparator外部比较器User实体可以和Comparator解耦@TestpublicvoidcomparatorTe......
  • 如何优化 Vite 项目中的 Lodash 引入:从 Tree Shaking 到自动化测试
    文章目录前言问题背景解决方案概述思路1:使用Lodash-ES替代Lodash思路2:使用Babel插件babel-plugin-lodash思路3:大规模替换后的验证与测试Babel的工作流程回顾最终选择及实践经验自动化测试:使用Puppeteer验证替换后的代码结论前言在现......
  • 安装git-format-staged后,Sourcetree中提交代码报错的解决方案
    pre-commit文件中内容为:git-format-staged--formatter"swiftformatstdin--stdinpath'{}'""*.swift" 在终端中,gitcommit不会报错。Sourcetree中提交具体错误:git-format-staged或者swiftformat命令找不到。解决方案一:利用Automator(自动操作)新建一个SourceTree应......
  • [Java基础]TreeMap
    为什么有了hashmap还要有treemapHASHMAP的特性和适用场景HashMap是基于哈希表的Map接口实现。这使得它在插入和查询键值对时能够保持平均常数时间的性能。由于这个特性,它特别适用于需要快速存取键值对的场景。HashMap的特性:操作性能:HashMap提供了O(1)时间性能对于基本操作,如......
  • 界面控件DevExpress .NET MAUI v24.1 - 发布TreeView等新组件
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具有高影响力......