From 3421f76628b925ae756b94cbfa51fa6ce889a31c Mon Sep 17 00:00:00 2001 From: Guo XIn <371864209@qq.com> Date: Sat, 20 Jan 2024 20:30:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=84=E5=88=99=EF=BC=9A?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=BE=93=E5=85=A5=E5=8F=A3=E4=BB=A4=E6=97=B6?= =?UTF-8?q?=E5=BA=94=E5=AF=B9=E5=8F=A3=E4=BB=A4=E5=9F=9F=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=8E=A9=E9=A5=B0=EF=BC=8C=E7=94=A8=E6=88=B7=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E6=AF=8F=E4=B8=80=E4=B8=AA=E5=AD=97=E7=AC=A6=E9=83=BD?= =?UTF-8?q?=E5=BA=94=E8=AF=A5=E4=BB=A5=E6=98=9F=E5=8F=B7=E5=BD=A2=E5=BC=8F?= =?UTF-8?q?=E5=9B=9E=E6=98=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../checkers/PasswordInputTagChecker.java | 38 +++++++++++++++++++ .../rules/java/PasswordInputTagChecker.html | 9 +++++ .../rules/java/PasswordInputTagChecker.json | 13 +++++++ .../test/files/PasswordInputTagChecker.html | 14 +++++++ .../checkers/PasswordInputTagCheckerTest.java | 35 +++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/PasswordInputTagChecker.java create mode 100644 sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/PasswordInputTagChecker.html create mode 100644 sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/PasswordInputTagChecker.json create mode 100644 sonar-keyware-plugins-java/src/test/files/PasswordInputTagChecker.html create mode 100644 sonar-keyware-plugins-java/src/test/java/com/keyware/sonar/java/rules/checkers/PasswordInputTagCheckerTest.java diff --git a/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/PasswordInputTagChecker.java b/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/PasswordInputTagChecker.java new file mode 100644 index 0000000..2a901c7 --- /dev/null +++ b/sonar-keyware-plugins-java/src/main/java/com/keyware/sonar/java/rules/checkers/PasswordInputTagChecker.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 - 2024. KeyWare.Co.Ltd All rights reserved. + * 项目名称:信息安全性设计准则检查插件 + * 项目描述:用于检查源代码的安全性设计准则的Sonarqube插件 + * 版权说明:本软件属北京关键科技股份有限公司所有,在未获得北京关键科技股份有限公司正式授权情况下,任何企业和个人,不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。 + */ + +package com.keyware.sonar.java.rules.checkers; + +import org.sonar.check.Rule; +import org.sonar.plugins.html.checks.AbstractPageCheck; +import org.sonar.plugins.html.node.TagNode; +import org.sonar.plugins.java.api.JavaCheck; + +/** + *

规则:用户输入口令时应对口令域进行掩饰。用户输入的每一个字符都应该以星号形式回显。

+ * 验证逻辑:当input标签的name或者id包含password时,如果type不是password时,则报告问题 + * + * @author GuoXin + * @date 2024/1/20 + */ +@Rule(key = "PasswordInputTagChecker") +public class PasswordInputTagChecker extends AbstractPageCheck implements JavaCheck { + @Override + public void startElement(TagNode node) { + if ("input".equalsIgnoreCase(node.getNodeName())) { + var id = node.getAttribute("id"); + var name = node.getAttribute("name"); + var type = node.getAttribute("type"); + // 当name或者id包含password时,如果type不是password时,则报告问题 + if ((id != null && id.contains("password")) || (name != null && name.contains("password"))) { + if (!"password".equalsIgnoreCase(type)) { + createViolation(node, "密码输入框的type属性不为password"); + } + } + } + } +} diff --git a/sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/PasswordInputTagChecker.html b/sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/PasswordInputTagChecker.html new file mode 100644 index 0000000..37d128f --- /dev/null +++ b/sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/PasswordInputTagChecker.html @@ -0,0 +1,9 @@ +

用户输入口令时应对口令域进行掩饰,用户输入的每一个字符都应该以星号形式回显。

+

用户输入口令时应对口令域进行掩饰,用户输入的每一个字符都应该以星号形式回显。

+
+
+
+

合规解决方案

+
+
+
diff --git a/sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/PasswordInputTagChecker.json b/sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/PasswordInputTagChecker.json new file mode 100644 index 0000000..3f08802 --- /dev/null +++ b/sonar-keyware-plugins-java/src/main/resources/org/sonar/l10n/java/rules/java/PasswordInputTagChecker.json @@ -0,0 +1,13 @@ +{ + "title": "用户输入口令时应对口令域进行掩饰。用户输入的每一个字符都应该以星号形式回显", + "type": "CODE_SMELL", + "status": "ready", + "remediation": { + "func": "Constant\/Issue", + "constantCost": "15min" + }, + "tags": [ + "28suo" + ], + "defaultSeverity": "Major" +} diff --git a/sonar-keyware-plugins-java/src/test/files/PasswordInputTagChecker.html b/sonar-keyware-plugins-java/src/test/files/PasswordInputTagChecker.html new file mode 100644 index 0000000..35d112c --- /dev/null +++ b/sonar-keyware-plugins-java/src/test/files/PasswordInputTagChecker.html @@ -0,0 +1,14 @@ + +Test for PasswordInputTagChecker + +

Test for PasswordInputTagChecker

+

Test 1 - FAIL

+

+

+ + + +
+

+ + \ No newline at end of file diff --git a/sonar-keyware-plugins-java/src/test/java/com/keyware/sonar/java/rules/checkers/PasswordInputTagCheckerTest.java b/sonar-keyware-plugins-java/src/test/java/com/keyware/sonar/java/rules/checkers/PasswordInputTagCheckerTest.java new file mode 100644 index 0000000..49ecca5 --- /dev/null +++ b/sonar-keyware-plugins-java/src/test/java/com/keyware/sonar/java/rules/checkers/PasswordInputTagCheckerTest.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 - 2024. KeyWare.Co.Ltd All rights reserved. + * 项目名称:信息安全性设计准则检查插件 + * 项目描述:用于检查源代码的安全性设计准则的Sonarqube插件 + * 版权说明:本软件属北京关键科技股份有限公司所有,在未获得北京关键科技股份有限公司正式授权情况下,任何企业和个人,不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。 + */ + +package com.keyware.sonar.java.rules.checkers; + +import com.keyware.sonar.java.utils.HtmlCheckMessagesVerifierRule; +import com.keyware.sonar.java.utils.HtmlTestHelper; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.sonar.plugins.html.visitor.HtmlSourceCode; + +import java.io.File; + +/** + * 测试规则:用户输入口令时应对口令域进行掩饰。用户输入的每一个字符都应该以星号形式回显 + * + * @author GuoXin + * @date 2024/1/20 + */ +public class PasswordInputTagCheckerTest { + @RegisterExtension + public HtmlCheckMessagesVerifierRule checkMessagesVerifier = new HtmlCheckMessagesVerifierRule(); + + @Test + public void detected() throws Exception { + HtmlSourceCode sourceCode = HtmlTestHelper.scan(new File("src/test/files/PasswordInputTagChecker.html"), new PasswordInputTagChecker()); + + checkMessagesVerifier.verify(sourceCode.getIssues()) + .next().atLine(16); + } +}