commit
918bd7a7a1
@ -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…
Reference in new issue