From 219eb4ab207abd84258f10f15bbc8fb17ce083ca Mon Sep 17 00:00:00 2001 From: Guo XIn <371864209@qq.com> Date: Sat, 20 Jan 2024 20:26:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=97=B6=E9=83=A8=E5=88=86=E8=A7=84=E5=88=99?= =?UTF-8?q?ID=E6=89=BE=E4=B8=8D=E5=88=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rules/checkers/RedirectUrlChecker.java | 52 +++++++------------ .../checkers/UploadFileVerifyChecker.java | 2 +- 2 files changed, 21 insertions(+), 33 deletions(-) diff --git a/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/RedirectUrlChecker.java b/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/RedirectUrlChecker.java index 3352500..d365328 100644 --- a/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/RedirectUrlChecker.java +++ b/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/RedirectUrlChecker.java @@ -38,7 +38,7 @@ public class RedirectUrlChecker extends IssuableSubscriptionVisitor { // 判断方法的返回节点的类型为RedirectView 或 String 类型 if ("RedirectView".equals(methodTree.returnType().toString())) { // 传递上下文,和方法的参数列表 - new RedirectViewCheckVisitor(this, parameters).check(block); + block.accept(new RedirectViewCheckVisitor(this, parameters)); } else if ("String".equals(methodTree.returnType().toString())) { checkByStringType(block, parameters); } @@ -110,7 +110,7 @@ public class RedirectUrlChecker extends IssuableSubscriptionVisitor { } - static class RedirectViewCheckVisitor extends IssuableSubscriptionVisitor { + static class RedirectViewCheckVisitor extends BaseTreeVisitor { private final RedirectUrlChecker checker; // 方法的参数列表 private final List methodParameters; @@ -120,40 +120,28 @@ public class RedirectUrlChecker extends IssuableSubscriptionVisitor { this.methodParameters = parameters; } - public void check(Tree block) { - this.scanTree(block); - } - @Override - public List nodesToVisit() { - // 订阅new class和 函数调用的节点 - var nodeType = new Tree.Kind[]{Tree.Kind.NEW_CLASS, Tree.Kind.METHOD_INVOCATION}; - return Arrays.asList(nodeType); + public void visitNewClass(NewClassTree classTree) { + // 判断是否为RedirectView,如果是,则判断是否有参数,如果有参数,则判断参数的类型是否由方法传递进来的 + String name = classTree.identifier().toString(); + if ("RedirectView".equals(name)) { + if (classTree.arguments().size() > 0) { + // 获取第一个参数语法树节点 + ExpressionTree argNode = classTree.arguments().get(0); + checkArgs(argNode, classTree); + } + } } @Override - public void visitNode(Tree tree) { - if (tree.is(Tree.Kind.NEW_CLASS)) { - NewClassTree classTree = (NewClassTree) tree; - // 判断是否为RedirectView,如果是,则判断是否有参数,如果有参数,则判断参数的类型是否由方法传递进来的 - String name = classTree.identifier().toString(); - if ("RedirectView".equals(name)) { - if (classTree.arguments().size() > 0) { - // 获取第一个参数语法树节点 - ExpressionTree argNode = classTree.arguments().get(0); - checkArgs(argNode, tree); - } - } - } else { - MethodInvocationTree invocationTree = (MethodInvocationTree) tree; - ExpressionTree expressionTree = invocationTree.methodSelect(); - if (expressionTree instanceof MemberSelectExpressionTree) { - MemberSelectExpressionTree member = (MemberSelectExpressionTree) expressionTree; - if (member.expression().symbolType().is("RedirectView") - && "setUrl".equals(member.identifier().name())) { - ExpressionTree argNode = invocationTree.arguments().get(0); - checkArgs(argNode, tree); - } + public void visitMethodInvocation(MethodInvocationTree invocationTree) { + ExpressionTree expressionTree = invocationTree.methodSelect(); + if (expressionTree instanceof MemberSelectExpressionTree) { + MemberSelectExpressionTree member = (MemberSelectExpressionTree) expressionTree; + if (member.expression().symbolType().is("RedirectView") + && "setUrl".equals(member.identifier().name())) { + ExpressionTree argNode = invocationTree.arguments().get(0); + checkArgs(argNode, invocationTree); } } } diff --git a/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/UploadFileVerifyChecker.java b/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/UploadFileVerifyChecker.java index cf83ea5..9feace8 100644 --- a/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/UploadFileVerifyChecker.java +++ b/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/UploadFileVerifyChecker.java @@ -20,7 +20,7 @@ import java.util.List; * @date 2024/1/8 */ -@Rule(key = "UploadFileVerify") +@Rule(key = "UploadFileVerifyChecker") public class UploadFileVerifyChecker extends IssuableSubscriptionVisitor { private final String value = "程序设计时,应以“白名单”方式限制允许用户上传的文件的类型";