feat: 漏洞列表api

This commit is contained in:
汪少伟
2025-03-19 10:39:33 +08:00
4 changed files with 53 additions and 53 deletions

View File

@@ -134,3 +134,25 @@ export function getVulnerabilityList() {
}
});
}
// 获取漏洞数据
export const getVulnList = (data): Promise<any> => {
return reqCatchV2(() =>
request({
url: `/api/v1/repo/vulnerability/page`,
method: 'post',
data,
})
);
}
// 获取漏洞数据
export const getVulnDetail = (data): Promise<any> => {
return reqCatchV2(() =>
request({
url: `/api/v1/repo/vulnerability/info`,
method: 'POST',
data,
})
);
}

View File

@@ -1543,13 +1543,3 @@ export const getOriginalComment = (params: types.DiscussionCommentProps): Promis
);
}
// 获取漏洞数据
export const getVulnDetail = (params: types.VulnDetailProps): Promise<any> => {
return reqCatch(() =>
request({
url: `/api/v1/repo/vulnerability/info`,
method: 'get',
params,
})
);
}

View File

@@ -102,8 +102,8 @@
</GModal>
<!-- 漏洞详情 -->
<d-drawer v-model="vulnDetailVisable" style="width: auto">
<VulnerabilityDetail :vulnId="currentVuln.id" :vulnInfo="currentVuln"></VulnerabilityDetail>
<d-drawer v-model="vulnDetailVisable" style="width: auto;">
<VulnerabilityDetail :softwareId="currentVuln.softwareId" :vulnId="currentVuln.id"></VulnerabilityDetail>
</d-drawer>
</div>
</template>
@@ -245,12 +245,15 @@ const vulnDetailVisable = ref(false);
const currentVuln = ref();
const openVulnDetail = (row) => {
vulnDetailVisable.value = true;
currentVuln.value = row;
};
onMounted(async () => {
await getVulnerabilityList();
});
if(row.softwareId && row.id) {
currentVuln.value = row;
} else {
currentVuln.value = {
softwareId: 47,
id: 72
}
}
}
</script>
<style scoped lang="scss">

View File

@@ -82,27 +82,27 @@
<d-row class="mb-3">
<d-col :span="12">
<span class="card-key width-90">组件名</span>
<span class="card-val">{{vulnDetail.compName || '--'}}</span>
<span class="card-val">{{componentInfo.moduleName || '--'}}</span>
</d-col>
<d-col :span="12">
<span class="card-key width-90">深度</span>
<span class="card-val">{{vulnDetail.complexity || '--'}}</span>
<span class="card-val">{{componentInfo.depth || '--'}}</span>
</d-col>
</d-row>
<d-row class="mb-3">
<d-col :span="12">
<span class="card-key width-90">当前版本</span>
<span class="card-val">{{vulnDetail.version || '--'}}</span>
<span class="card-val">{{componentInfo.currentVersion || '--'}}</span>
</d-col>
<d-col :span="12">
<span class="card-key width-90">最新版本</span>
<span class="card-val">{{vulnDetail.cnvdId || '--'}}</span>
<span class="card-val">{{componentInfo.latestVersion || '--'}}</span>
</d-col>
</d-row>
<d-row>
<d-col :span="24">
<span class="card-key width-90">组件依赖关系</span>
<span class="card-val">{{vulnDetail.version || '--'}}</span>
<span class="card-val">{{componentInfo.version || '--'}}</span>
</d-col>
</d-row>
</Card>
@@ -111,17 +111,17 @@
<d-row class="mb-3">
<d-col :span="12">
<span class="card-key width-90">补丁版本</span>
<span class="card-val">{{vulnDetail.fixVersion || '--'}}</span>
<span class="card-val">{{remediationInfo.recommendedVersion || '--'}}</span>
</d-col>
<d-col :span="12">
<span class="card-key width-90">修复兼容性</span>
<span class="card-val">{{vulnDetail.complexity || '--'}}</span>
<span class="card-val">{{remediationInfo.compatibility || '--'}}</span>
</d-col>
</d-row>
<d-row>
<d-col :span="24">
<span class="card-key width-90">修复建议</span>
<span class="card-val">{{vulnDetail.fixIssue || '--'}}</span>
<span class="card-val">{{remediationInfo.recommendedFix || '--'}}</span>
</d-col>
</d-row>
</Card>
@@ -129,38 +129,23 @@
</template>
<script setup lang="ts">
import { getVulnDetail } from '@/api/repo';
import { getVulnDetail } from '@/api/jyh';
import { ref } from 'vue';
const propsData = defineProps(['repoId', 'vulnId', 'vulnInfo']);
const vulnDetail = ref({
vulnId: 'HWPSIRT-2022-29348',
cweId: 'CVE-2013-0293',
cnvdId: 'CNVD-201105-215',
name: '',
code: '',
description: '攻击者通过特制的PUT请求执行任意SQL命令可能导致数据库内容被操控。',
extraInfo: '腾讯云丁安全实验室发现并报告该漏洞。',
fixIssue: '使用参数化查询或预编译语句避免SQL注入。',
attackVector: '',
attackComplexity: '',
userInteraction: '',
publishDate: '2018-07-31',
compName: 'mplayer',
fixVersion: '1.4',
"privilegesRequired": "None",
"exploitabilityScore": 9.8,
"impactScore": 10.0,
"cvssScore": 9.9,
"severity": "Critical",
});
const propsData = defineProps(['softwareId', 'vulnId', 'vulnInfo']);
const vulnDetail = ref({});
const componentInfo = ref({});
const remediationInfo = ref({})
const queryVulnDetail = async () => {
const data = await getVulnDetail({repoId: propsData.repoId, id: propsData.vulnId});
vulnDetail.value = data;
const data = await getVulnDetail({softwareId: propsData.softwareId, id: propsData.vulnId});
if (data?.data?.data?.data) {
vulnDetail.value = data.data.data.data.vulnerabilityInfo;
componentInfo.value = data.data.data.data.componentInfo;
remediationInfo.value = data.data.data.data.remediationInfo;
}
};
// queryVulnDetail();
// vulnDetail.value = propsData.vulnInfo;
queryVulnDetail();
</script>
<style scoped lang="scss">