修复:C++使用盐值计算散列值

wuhaoyang
RenFengJiang 11 months ago
parent a95fb68045
commit e69e2fc5ce
  1. 55
      sonar-keyware-plugins-cxx/src/main/java/com/keyware/sonar/cxx/rules/checkers/PassWordCountChecker.java
  2. 34
      sonar-keyware-plugins-cxx/src/test/java/com/keyware/sonar/cxx/rules/checkers/PassWordCountCheckerTest.java
  3. 10
      sonar-keyware-plugins-cxx/src/test/resources/com/keyware/sonar/cxx/rules/checkers/PassWordCountChecker.cc

@ -0,0 +1,55 @@
/*
* Copyright (c) 2023 - 2024. KeyWare.Co.Ltd All rights reserved.
* 项目名称C++ 信息安全性设计准则
* 项目描述用于检查C++源代码的安全性设计准则的Sonarqube插件
* 版权说明本软件属北京关键科技股份有限公司所有在未获得北京关键科技股份有限公司正式授权情况下任何企业和个人不能获取阅读安装传播本软件涉及的任何受知识产权保护的内容
*/
package com.keyware.sonar.cxx.rules.checkers;
import com.sonar.cxx.sslr.api.AstNode;
import com.sonar.cxx.sslr.api.Grammar;
import org.sonar.check.Priority;
import org.sonar.check.Rule;
import org.sonar.cxx.parser.CxxGrammarImpl;
import org.sonar.cxx.squidbridge.annotations.ActivatedByDefault;
import org.sonar.cxx.squidbridge.annotations.SqaleConstantRemediation;
import org.sonar.cxx.squidbridge.checks.SquidCheck;
import java.util.List;
/**
* TODO PassWordCountChecker
*
* @author RenFengJiang
* @date 2024/1/13
*/
@Rule(key = "PassWordCountChecker", name = "使用盐值计算散列值", description = "使用盐值计算散列值,增加攻击者破解口令的难度", priority = Priority.INFO, tags = {"28suo"})
@ActivatedByDefault
@SqaleConstantRemediation("5min")
public class PassWordCountChecker extends SquidCheck<Grammar> {
@Override
public void init() {
// 订阅要检查AST节点类型,用于在visitNode方法中检查该类型节点
this.subscribeTo(
CxxGrammarImpl.simpleDeclaration
);
}
/**
* 检查AST节点
*
* @param astNode 要处理的AST节点该节点类型为通过subscribeTo方法订阅的类型
*/
@Override
public void visitNode(AstNode astNode) {
List<AstNode> descendants = astNode.getDescendants(CxxGrammarImpl.templateName);
for (AstNode desc:descendants) {
String value = desc.getToken().getValue();
if("hash".equals(value)){
getContext().createLineViolation(this, "使用盐值计算散列值", desc);
}
}
}
}

@ -0,0 +1,34 @@
/*
* Copyright (c) 2023 - 2024. KeyWare.Co.Ltd All rights reserved.
* 项目名称C++ 信息安全性设计准则
* 项目描述用于检查C++源代码的安全性设计准则的Sonarqube插件
* 版权说明本软件属北京关键科技股份有限公司所有在未获得北京关键科技股份有限公司正式授权情况下任何企业和个人不能获取阅读安装传播本软件涉及的任何受知识产权保护的内容
*/
package com.keyware.sonar.cxx.rules.checkers;
import com.keyware.sonar.cxx.CxxFileTesterHelper;
import org.junit.jupiter.api.Test;
import org.sonar.cxx.CxxAstScanner;
import org.sonar.cxx.squidbridge.api.SourceFile;
import org.sonar.cxx.squidbridge.checks.CheckMessagesVerifier;
import java.io.IOException;
/**
* TODO PassWordCountCheckerTest
*
* @author RenFengJiang
* @date 2024/1/13
*/
public class PassWordCountCheckerTest {
@Test
public void checkTest() throws IOException {
var checker = new PassWordCountChecker();
var tester = CxxFileTesterHelper.create("PassWordCountChecker.cc");
SourceFile file = CxxAstScanner.scanSingleInputFile(tester.asInputFile(), checker);
CheckMessagesVerifier.verify(file.getCheckMessages())
.next().atLine(5).withMessage("使用盐值计算散列值")
.noMore();
}
}

@ -0,0 +1,10 @@
int main() {
std::string input = "example";
// 使用std::hash
std::hash<std::string> hasher ; // error
size_t hash_value = hasher(input);
std::cout << "Hash value using std::hash: " << hash_value << std::endl;
return 0;
}
Loading…
Cancel
Save