package edu.sjtu.infosec.ismp.manager.RAM.service.impl; import java.util.ArrayList; import java.util.List; import java.util.Map; import edu.sjtu.infosec.ismp.manager.RAM.dao.DynaLeakDao; import edu.sjtu.infosec.ismp.manager.RAM.dao.DynaLeakThreDao; import edu.sjtu.infosec.ismp.manager.RAM.dao.StatCVEThreDao; import edu.sjtu.infosec.ismp.manager.RAM.model.AsseInfoAsse; import edu.sjtu.infosec.ismp.manager.RAM.model.AsseInfoProj; import edu.sjtu.infosec.ismp.manager.RAM.model.AsseKnowDynaLeak; import edu.sjtu.infosec.ismp.manager.RAM.model.AsseKnowDynaLeakThre; import edu.sjtu.infosec.ismp.manager.RAM.model.AsseKnowStatCVEThre; import edu.sjtu.infosec.ismp.manager.RAM.service.DynaLeakThreService; import edu.sjtu.infosec.ismp.manager.comm.model.page.Page; import edu.sjtu.infosec.ismp.manager.comm.model.page.PageResult; import edu.sjtu.infosec.ismp.manager.comm.model.page.PageUtil; /** * 应用层 动态资产漏洞威胁分析Manager接口实现类. * */ public class DynaLeakThreServiceImpl implements DynaLeakThreService { /** * 动态资产漏洞分析数据访问对象接口 */ private DynaLeakDao dynaLeakDao; /** * setDynaLeakDao * @param dynaleakDao * dynaLeakDao **/ public void setDynaLeakDao(DynaLeakDao dynaleakDao) { this.dynaLeakDao = dynaleakDao; } /** * 动态资产漏洞威胁分析数据访问对象接口 */ private DynaLeakThreDao dynaLeakThreDao; /** * setDynaLeakThreDao * @param dynaleakThreDao * dynaLeakThreDao **/ public void setDynaLeakThreDao(DynaLeakThreDao dynaleakThreDao) { this.dynaLeakThreDao = dynaleakThreDao; } /** * 知识库静态漏洞威胁数据访问对象接口 */ private StatCVEThreDao statCVEThreDao; /** * setStatCVEThreDao * @param statcVEThreDao * statCVEThreDao **/ public void setStatCVEThreDao(StatCVEThreDao statcVEThreDao) { this.statCVEThreDao = statcVEThreDao; } /** * 批量保存/更新动态资产漏洞威胁 * * @param dynaLeakThreList * 动态资产漏洞列表 **/ public void batchSaveOrUpdate(List<AsseKnowDynaLeakThre> dynaLeakThreList) { dynaLeakThreDao.batchSaveOrUpdate(dynaLeakThreList); } /** * 检查是否已存在该资产漏洞威胁 * @param asseInfoProjId * 测评项目Id * @param asseInfoAsse * 关联资产 * @param asseKnowStatCveThreId * 静态威胁Id * @return 是否已存在 **/ public boolean checkExitDynaLeakThre(Integer asseInfoProjId, AsseInfoAsse asseInfoAsse, String asseKnowStatCveThreId) { return dynaLeakThreDao.checkExitDynaLeakThre(asseInfoProjId, asseInfoAsse, new Integer(asseKnowStatCveThreId)); } /** * 查询动态资产漏洞威胁 * * @param id * 动态资产漏洞威胁id * @return 动态资产漏洞威胁对象 **/ public AsseKnowDynaLeakThre find(String id) { return dynaLeakThreDao.find(new Integer(id)); } /** * 查询动态资产漏洞威胁数量 * @param asseInfoProj * 测评项目 * @param asseInfoAsse * 资产 * @return 动态资产漏洞数量 **/ public int getCount(AsseInfoProj asseInfoProj, List<AsseInfoAsse> asseInfoAsse) { return dynaLeakThreDao.getCount(asseInfoProj, asseInfoAsse); } /** * 查询动态资产漏洞威胁记录 * @param asseInfoProj * 测评项目 * @return 漏洞记录列表 **/ public List<AsseKnowDynaLeakThre> listDynaLeakThre(AsseInfoProj asseInfoProj) { return dynaLeakThreDao.listDynaLeakThre(asseInfoProj); } /** * 保存/更新动态资产漏洞威胁 * * @param dynaLeakThre * 动态资产漏洞威胁 **/ public void saveOrUpdate(AsseKnowDynaLeakThre dynaLeakThre) { dynaLeakThreDao.saveOrUpdate(dynaLeakThre); } /** * 检查是否已存在该资产漏洞 * @param asseInfoProj * 测评项目 * @return 是否已存在 **/ public boolean checkExitDynaLeakThreList(AsseInfoProj asseInfoProj) { boolean ret = false; List list = listDynaLeakThre(asseInfoProj); if(list!=null && list.size()>0) { ret = true; } return ret; } /** * 保存动态资产漏洞威胁 * @param asseInfoProj * 测评项目 **/ public void saveDynaLeakThre(AsseInfoProj asseInfoProj) { boolean exit = checkExitDynaLeakThreList(asseInfoProj); if(!exit) { List<AsseKnowDynaLeak> dynaLeakList = dynaLeakDao.listDynaLeak(asseInfoProj); if(dynaLeakList!=null && dynaLeakList.size()>0) { AsseKnowDynaLeak dynaLeak = null; List statCVEThreList = null; AsseKnowStatCVEThre statCVEThre = null; List<AsseKnowDynaLeakThre> dynaLeakThreList = new ArrayList<AsseKnowDynaLeakThre>(); for(int i=0;i<dynaLeakList.size();i++) { dynaLeak = dynaLeakList.get(i); String cveId = dynaLeak.getCveId(); if(cveId!=null && !"".equals(cveId)){ statCVEThreList = statCVEThreDao.find(cveId); } System.out.println(statCVEThreList); if(statCVEThreList==null || statCVEThreList.size()<=0) { AsseKnowDynaLeakThre dynaLeakThre = new AsseKnowDynaLeakThre(); dynaLeakThre.setAsse(dynaLeak.getAsse()); dynaLeakThre.setAsseInfoProjId(asseInfoProj.getId()); dynaLeakThre.setDynaLeak(dynaLeak); dynaLeakThre.setPossibility(dynaLeak.getSeriLeve()); dynaLeakThreList.add(dynaLeakThre); }else if(statCVEThreList!=null && statCVEThreList.size()>0){ for(int j=0;j<statCVEThreList.size();j++) { statCVEThre = (AsseKnowStatCVEThre) statCVEThreList.get(j); AsseKnowDynaLeakThre dynaLeakThre = new AsseKnowDynaLeakThre(); dynaLeakThre.setAsse(dynaLeak.getAsse()); dynaLeakThre.setAsseInfoProjId(asseInfoProj.getId()); dynaLeakThre.setDynaLeak(dynaLeak); dynaLeakThre.setPossibility(dynaLeak.getSeriLeve()); dynaLeakThre.setAsseKnowStatCveThreId(statCVEThre.getId()); dynaLeakThre.setAsseKnowStatThreKindId(statCVEThre.getThreKind().getId()); dynaLeakThre.setThreCode(statCVEThre.getThreCode()); dynaLeakThreList.add(dynaLeakThre); } } } dynaLeakThreDao.batchSaveOrUpdate(dynaLeakThreList); } } } /** * 漏洞与威胁关联 * @param paraMap * 参数Map * @param asseInfoProj * 测评项目 **/ public void relateLeakToThre(Map paraMap, AsseInfoProj asseInfoProj) { List<AsseKnowDynaLeakThre> dynaLeakList = new ArrayList<AsseKnowDynaLeakThre>(); String[] leakThreIds = (String[]) paraMap.get("leakThreIds"); String[] leakThreKindIds = (String[]) paraMap.get("leakThreKindIds"); String[] leakCveThreIds = (String[]) paraMap.get("leakCveThreIds"); String[] dynaLeakThreLeves = (String[]) paraMap.get("dynaLeakThreLeves"); for(int i=0;i<leakThreIds.length;i++) { AsseKnowDynaLeakThre dynaLeakThre = dynaLeakThreDao.find(new Integer(leakThreIds[i])); dynaLeakThre.setAsseKnowStatThreKindId(new Integer(leakThreKindIds[i])); dynaLeakThre.setAsseKnowStatCveThreId(new Integer(leakCveThreIds[i])); dynaLeakThre.setPossibility(dynaLeakThreLeves[i]); dynaLeakList.add(dynaLeakThre); } batchSaveOrUpdate(dynaLeakList); } public List<AsseKnowDynaLeakThre> listDynaLeak(int startResult1, int maxResult1, AsseInfoProj asseInfoProj, List<AsseInfoAsse> asseInfo) { List<AsseKnowDynaLeakThre> list = dynaLeakThreDao.listDynaLeakThrePage(startResult1,maxResult1, asseInfoProj, asseInfo); return list; } public List<AsseKnowDynaLeakThre> listByDynaLeakId(int dynaLeakId) { List<AsseKnowDynaLeakThre> list = dynaLeakThreDao.listByDynaLeakId(dynaLeakId); return list; } }