新增准则:在服务器端不允许仅仅依赖文件的名称或者扩展后缀决定软件的行为,应依赖文件的内容决定软件的行为。

wuhaoyang
wuhaoyang 8 months ago
parent 4bb5ffd929
commit 7f1716b7ab
  1. 56
      sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/FileCheck.java
  2. 9
      sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/FileCheck.html
  3. 13
      sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/FileCheck.json
  4. 22
      sonar-keyware-plugins-java/src/test/files/FileCheck.java
  5. 29
      sonar-keyware-plugins-java/src/test/java/com/keyware/sonar/java/rules/checkers/FileCheckTest.java

@ -0,0 +1,56 @@
/*
* Copyright (c) 2023 - 2024. KeyWare.Co.Ltd All rights reserved.
* 项目名称Java 信息安全性设计准则
* 项目描述用于检查Java源代码的安全性设计准则的Sonarqube插件
* 版权说明本软件属北京关键科技股份有限公司所有在未获得北京关键科技股份有限公司正式授权情况下任何企业和个人不能获取阅读安装传播本软件涉及的任何受知识产权保护的内容
*/
package com.keyware.sonar.java.rules.checkers;
import org.sonar.check.Rule;
import org.sonar.plugins.java.api.IssuableSubscriptionVisitor;
import org.sonar.plugins.java.api.tree.*;
import java.util.Arrays;
import java.util.List;
/**
* 在服务器端不允许仅仅依赖文件的名称或者扩展后缀决定软件的行为应依赖文件的内容决定软件的行为
*
* @author WuHaoyang
* @date 2024/1/13
*/
@Rule(key = "FileCheck")
public class FileCheck extends IssuableSubscriptionVisitor {
private static final List<String> FILE_NAME_VARS = Arrays.asList("fileName", "fileExt", "fileSuffix");
@Override
public List<Tree.Kind> nodesToVisit() {
return Arrays.asList(Tree.Kind.BLOCK, Tree.Kind.IF_STATEMENT);
}
@Override
public void visitNode(Tree tree) {
if (tree.is(Tree.Kind.IF_STATEMENT)) {
IfStatementTree ifStatement = (IfStatementTree) tree;
ExpressionTree condition = ifStatement.condition();
// 在条件中检查文件名、文件扩展名或文件后缀的使用
checkVariableUsage(condition);
}
}
private void checkVariableUsage(ExpressionTree condition) {
condition.accept(new BaseTreeVisitor() {
@Override
public void visitIdentifier(IdentifierTree tree) {
if (FILE_NAME_VARS.contains(tree.name())) {
// 如果在条件中发现了文件名、文件扩展名或文件后缀的使用,报告问题
System.out.println("依赖文件的名称或者扩展后缀:"+tree.name());
reportIssue(tree, "在服务器端不允许仅仅依赖文件的名称或者扩展后缀决定软件的行为,应依赖文件的内容决定软件的行为");
}
}
});
}
}

@ -0,0 +1,9 @@
<p>在服务器端不允许仅仅依赖文件的名称或者扩展后缀决定软件的行为</p>
<h2>在服务器端不允许仅仅依赖文件的名称或者扩展后缀决定软件的行为</h2>
<pre>
</pre>
<h2>合规解决方案</h2>
<pre>
</pre>

@ -0,0 +1,13 @@
{
"title": "在服务器端不允许仅仅依赖文件的名称或者扩展后缀决定软件的行为",
"type": "CODE_SMELL",
"status": "ready",
"remediation": {
"func": "Constant\/Issue",
"constantCost": "5min"
},
"tags": [
"28suo"
],
"defaultSeverity": "Minor"
}

@ -0,0 +1,22 @@
class FileCheck{
public String FileName(){
String fileName = "";
String fileExt = "";
String fileSuffix = "";
if(fileName.endsWith("png") ){// Noncompliant {{在服务器端不允许仅仅依赖文件的名称或者扩展后缀决定软件的行为,应依赖文件的内容决定软件的行为}}
}
if(fileExt.equals("jpg") ){// Noncompliant {{在服务器端不允许仅仅依赖文件的名称或者扩展后缀决定软件的行为,应依赖文件的内容决定软件的行为}}
}
if(fileSuffix.equals("jpg")){// Noncompliant {{在服务器端不允许仅仅依赖文件的名称或者扩展后缀决定软件的行为,应依赖文件的内容决定软件的行为}}
}
return null;
}
}

@ -0,0 +1,29 @@
/*
* Copyright (c) 2023 - 2024. KeyWare.Co.Ltd All rights reserved.
* 项目名称Java 信息安全性设计准则
* 项目描述用于检查Java源代码的安全性设计准则的Sonarqube插件
* 版权说明本软件属北京关键科技股份有限公司所有在未获得北京关键科技股份有限公司正式授权情况下任何企业和个人不能获取阅读安装传播本软件涉及的任何受知识产权保护的内容
*/
package com.keyware.sonar.java.rules.checkers;
import com.keyware.sonar.java.utils.FilesUtils;
import org.junit.jupiter.api.Test;
import org.sonar.java.checks.verifier.CheckVerifier;
/**
*
* @author WuHaoYang
* @date 2024/1/6
*/
public class FileCheckTest {
@Test
void detected() {
CheckVerifier.newVerifier()
.onFile("src/test/files/FileCheck.java")
.withCheck(new FileCheck())
.withClassPath(FilesUtils.getClassPath("target/test-jars"))
.verifyIssues();
}
}
Loading…
Cancel
Save