sast二进制

This commit is contained in:
even 2025-07-30 15:47:59 +08:00
parent 8d532318ac
commit 649b17a163
4 changed files with 73 additions and 20 deletions

View File

@ -32,24 +32,25 @@ public class SastVulInfoReq {
} }
defectDetails.add(detail); defectDetails.add(detail);
} }
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class DefectDetail {
private String file;
private int line;
private String path;
private List<String> propagationPath = new ArrayList<>();
private String description;
private String potentialRisk;
// 便捷方法
public void addPropagationPath(String path) {
if (propagationPath == null) {
propagationPath = new ArrayList<>();
}
propagationPath.add(path);
}
} }
@Data
@NoArgsConstructor
@AllArgsConstructor
class DefectDetail {
private String file;
private int line;
private String path;
private List<String> propagationPath = new ArrayList<>();
private String description;
private String potentialRisk;
// 便捷方法
public void addPropagationPath(String path) {
if (propagationPath == null) {
propagationPath = new ArrayList<>();
}
propagationPath.add(path);
}
} }

View File

@ -37,5 +37,5 @@ public interface SastService {
List<SastEngineLogResp> engineLog(String applicationId); List<SastEngineLogResp> engineLog(String applicationId);
SastApplicationBinaryStashResp applicationBinaryStash(SastApplicationBinaryStashReq req) ; SastApplicationBinaryStashResp applicationBinaryStash(SastApplicationBinaryStashReq req) ;
SastApplicationStashResp binaryStashScan(String applicationId); SastApplicationStashResp binaryStashScan(String applicationId);
void saveReportVulInfo(List<SastVulInfoReq> req); void saveReportVulInfo(List<SastVulInfoReq> list,String targetType,String targetName,String city,String instanceId,String taskId,String taskType);
} }

View File

@ -9,6 +9,7 @@ import cd.casic.ci.process.process.dataObject.volumnInfo.VulInfo;
import cd.casic.ci.process.process.service.pipeline.PipelineService; import cd.casic.ci.process.process.service.pipeline.PipelineService;
import cd.casic.ci.process.process.service.sast.SastService; import cd.casic.ci.process.process.service.sast.SastService;
import cd.casic.ci.process.process.service.target.TargetVersionService; import cd.casic.ci.process.process.service.target.TargetVersionService;
import cd.casic.ci.process.process.service.vulInfo.VulInfoService;
import cd.casic.ci.process.properties.SastProperties; import cd.casic.ci.process.properties.SastProperties;
import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
@ -27,6 +28,7 @@ import org.luaj.vm2.ast.Str;
import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.FileSystemResource;
import org.springframework.http.*; import org.springframework.http.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@ -55,10 +57,13 @@ public class SastServiceImpl implements SastService {
private PipelineService pipelineService; private PipelineService pipelineService;
@Resource @Resource
private TargetVersionService targetVersionService; private TargetVersionService targetVersionService;
@Resource
private VulInfoService vulInfoService;
public static final String TOKEN_PREFIX = "Bearer "; public static final String TOKEN_PREFIX = "Bearer ";
public static final String TOKEN_HEADER_KEY = "authorization"; public static final String TOKEN_HEADER_KEY = "authorization";
public static final String REDIS_SAST_TOKEN_KEY = "REDIS_SAST_TOKEN_KEY"; public static final String REDIS_SAST_TOKEN_KEY = "REDIS_SAST_TOKEN_KEY";
private SastTokenResp getTokenRemote(){ private SastTokenResp getTokenRemote(){
HttpHeaders httpHeaders = new HttpHeaders(); HttpHeaders httpHeaders = new HttpHeaders();
HttpEntity<SastProperties> httpEntity = new HttpEntity<SastProperties>(sastProperties,httpHeaders); HttpEntity<SastProperties> httpEntity = new HttpEntity<SastProperties>(sastProperties,httpHeaders);
@ -338,13 +343,37 @@ public class SastServiceImpl implements SastService {
} }
@Override @Override
public void saveReportVulInfo(List<SastVulInfoReq> list) { public void saveReportVulInfo(List<SastVulInfoReq> list,String targetType,String targetName,String city,String instanceId,String taskId,String taskType) {
if (CollectionUtils.isEmpty(list)) {
return;
}
List<VulInfo> vulInfos = new ArrayList<>(list.size());
for (SastVulInfoReq req : list) { for (SastVulInfoReq req : list) {
VulInfo vulInfo = new VulInfo(); VulInfo vulInfo = new VulInfo();
// 设置安全等级名称 // 设置安全等级名称
vulInfo.setVulTitle(req.getName());
String severity = req.getSeverity();
List<SastVulInfoReq.DefectDetail> defectDetails = req.getDefectDetails();
// 设置描述修复措施 // 设置描述修复措施
//设置流水线相关属性 if (CollectionUtils.isEmpty(defectDetails)) {
continue;
}
//设置流水线相关属性,因为漏洞描述还有漏洞修复建议列表里面每一项都是一样的所以直接取第一个
SastVulInfoReq.DefectDetail first = defectDetails.getFirst();
String description = first.getDescription();
String potentialRisk = first.getPotentialRisk();
vulInfo.setSolution(potentialRisk);
vulInfo.setVulDescription(description);
vulInfo.setSeverity(securityLevelToSeverity(severity));
vulInfo.setTargetType(targetType);
vulInfo.setTargetName(targetName);
vulInfo.setCity(city);
vulInfo.setInstanceId(instanceId);
vulInfo.setTaskId(taskId);
vulInfo.setTaskType(taskType);
vulInfos.add(vulInfo);
} }
vulInfoService.saveBatch(vulInfos);
} }
private HttpHeaders getHeaders(){ private HttpHeaders getHeaders(){
@ -352,4 +381,17 @@ public class SastServiceImpl implements SastService {
httpHeaders.set(TOKEN_HEADER_KEY,TOKEN_PREFIX+getToken()); httpHeaders.set(TOKEN_HEADER_KEY,TOKEN_PREFIX+getToken());
return httpHeaders; return httpHeaders;
} }
private Integer securityLevelToSeverity(String securityLevel) {
if (securityLevel == null) {
return 0;
}
// 映射规则严重 -> 1, 高危 -> 2, 中危 -> 3, 低危 -> 4
return switch (securityLevel) {
case "严重" -> 1;
case "高危" -> 2;
case "中危" -> 3;
case "安全", "低危" -> 4;
default -> 0;
};
}
} }

View File

@ -1,13 +1,17 @@
package cd.casic.server; package cd.casic.server;
import cd.casic.ci.process.constant.PipelineTargetTypeConstant; import cd.casic.ci.process.constant.PipelineTargetTypeConstant;
import cd.casic.ci.process.dto.req.sast.SastVulInfoReq;
import cd.casic.ci.process.dto.req.testCase.TestCaseAITaskCreateReq; import cd.casic.ci.process.dto.req.testCase.TestCaseAITaskCreateReq;
import cd.casic.ci.process.dto.resp.ScaVulInfoResp; import cd.casic.ci.process.dto.resp.ScaVulInfoResp;
import cd.casic.ci.process.process.converter.VulInfoConverter; import cd.casic.ci.process.process.converter.VulInfoConverter;
import cd.casic.ci.process.process.dataObject.target.TargetVersion; import cd.casic.ci.process.process.dataObject.target.TargetVersion;
import cd.casic.ci.process.process.dataObject.volumnInfo.VulInfo; import cd.casic.ci.process.process.dataObject.volumnInfo.VulInfo;
import cd.casic.ci.process.process.service.sast.SastService;
import cd.casic.ci.process.process.service.testCase.TestCaseAIGeneratorService; import cd.casic.ci.process.process.service.testCase.TestCaseAIGeneratorService;
import cd.casic.ci.process.process.service.vulInfo.VulInfoService; import cd.casic.ci.process.process.service.vulInfo.VulInfoService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -34,6 +38,8 @@ public class VulInfoTest {
private VulInfoService vulInfoService; private VulInfoService vulInfoService;
@Resource @Resource
private VulInfoConverter converter; private VulInfoConverter converter;
@Resource
private SastService sastService;
@Test @Test
public void test() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException { public void test() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
System.out.println(vulInfoService.scaVulCountGet(681)); System.out.println(vulInfoService.scaVulCountGet(681));
@ -61,5 +67,9 @@ public class VulInfoTest {
}); });
vulInfoService.saveBatch(vulInfos); vulInfoService.saveBatch(vulInfos);
}
@Test
public void sastTest(){
} }
} }