コード例 #1
0
ファイル: CompareTool.py プロジェクト: devandi/AnalyzeTool
	def printAndWriteResult(self, flawMap, baseDir, scannerList, title):
		mainResult = ComparisonResultHolder()
		scannerResults = OrderedDict()
		securityModelResultMap = OrderedDict()
		scannerResults['JULIET'] = ComparisonResultHolder()
		securityModelResultMap['JULIET'] = SecurityModelComparision(self.securityModel,'JULIET')
		
		root = ET.Element("analyzereport")
		details = ET.SubElement(root, "details")
		for sc in scannerList:
			scannerResults[sc.name] = ComparisonResultHolder()
			securityModelResultMap[sc.name] = SecurityModelComparision(self.securityModel,sc.name)
		
		for key, issueComparison in flawMap.items():
			issueComparison.compareIssues()
			#print(key)
			
			if(len(issueComparison.existingIssues) >0):
				totalIssues = 1
			else:
				totalIssues = 0
			#print("totalIssues="+str(totalIssues))
			mainResult.issueCnt+=totalIssues
			
			fileIssue = ET.SubElement(details, 'file', {'totalIssues' : str(totalIssues), 'name' : issueComparison.fileName})
			
			for scanner, issueHolder in issueComparison.foundIssues.items():
				#print("\tSecurity-Scanner: "+scanner)
				#print("\t\tfound issues="+str(len(issueHolder.foundIssues)))
				#print("\t\tcorrectMath="+str(issueHolder.correctMatchCnt))
				
				secModelResult = securityModelResultMap[scanner]
				comparisonResult = scannerResults.get(scanner)
				comparisonResult.addIssue(issueComparison,issueHolder)
				
				secModelResult.addIssueComparision(issueComparison)
				
				if(scanner!='JULIET'):
					scannerXMLResult = ET.SubElement(fileIssue, 'scanner', {'name' : scanner, 'foundIssues': str(len(issueHolder.foundIssues)),'realIssues': str(len(issueComparison.existingIssues)), 'correctLineMatches' : str(issueHolder.correctMatchCnt), 'differentLineMatches' : str(issueHolder.differentLineMatches), 'differentTypeMatches' : str(issueHolder.rangeMatch), 'differentTypeMatches' : str(issueHolder.rangeMatch), 'noneMatching' : str(issueComparison.noneMatching)})
				
		print("=============================")
		print("========"+title+" SUMMARY========")
		print("=============================")
		print("Total Issues: "+str(mainResult.issueCnt))
		print("Scanners: ")
		
		summary = ET.SubElement(root, 'summary', {'totalIssues' : str(mainResult.issueCnt)})
		chartData = OrderedDict()
		chartData['Total Issues'] = mainResult.issueCnt
		for key, value in scannerResults.items():
			
			if(scanner!='JULIET'):
				summaryDetail = value.getXMLSubelement(summary, 'scanner', key)
				print(key+" found "+str(value.issueCnt)+" of "+str(value.realIssues))
				value.printDetailData()
				#print("\t"+str(value.withoutCWE)+" CWE")
				chartData[key] = value.issueCnt
				self.printPieChart(key, value, baseDir)
		
		secModelXML = ET.SubElement(root, 'securityModel')
		for key, value in securityModelResultMap.items():
			compareResultMap = value.compare()
			if(scanner!='JULIET'):
				scannerXML = ET.SubElement(secModelXML, 'scanner', {'name' : key})
				print(key)
				for weaknessClass, resultHolder in compareResultMap.items():
					resultHolder.getXMLSubelement(scannerXML, 'weaknessClass', weaknessClass)
					print(weaknessClass)
					resultHolder.printDetailData()
		#write xml
		with open(baseDir+'report.xml', 'w') as f:
			f.write(parseString(ET.tostring(root)).toprettyxml())
		
		self.printChart(chartData, baseDir, title)
		
		htmlReport = HTMLReport(mainResult, scannerResults, securityModelResultMap, baseDir+"report.html")
		htmlReport.buildReport()
コード例 #2
0
    def printAndWriteResult(self, flawMap, baseDir, scannerList, title):
        mainResult = ComparisonResultHolder()
        scannerResults = OrderedDict()
        securityModelResultMap = OrderedDict()
        scannerResults['JULIET'] = ComparisonResultHolder()
        securityModelResultMap['JULIET'] = SecurityModelComparision(
            self.securityModel, 'JULIET')

        root = ET.Element("analyzereport")
        details = ET.SubElement(root, "details")
        for sc in scannerList:
            scannerResults[sc.name] = ComparisonResultHolder()
            securityModelResultMap[sc.name] = SecurityModelComparision(
                self.securityModel, sc.name)

        for key, issueComparison in flawMap.items():
            issueComparison.compareIssues()
            #print(key)

            if (len(issueComparison.existingIssues) > 0):
                totalIssues = 1
            else:
                totalIssues = 0
            #print("totalIssues="+str(totalIssues))
            mainResult.issueCnt += totalIssues

            fileIssue = ET.SubElement(details, 'file', {
                'totalIssues': str(totalIssues),
                'name': issueComparison.fileName
            })

            for scanner, issueHolder in issueComparison.foundIssues.items():
                #print("\tSecurity-Scanner: "+scanner)
                #print("\t\tfound issues="+str(len(issueHolder.foundIssues)))
                #print("\t\tcorrectMath="+str(issueHolder.correctMatchCnt))

                secModelResult = securityModelResultMap[scanner]
                comparisonResult = scannerResults.get(scanner)
                comparisonResult.addIssue(issueComparison, issueHolder)

                secModelResult.addIssueComparision(issueComparison)

                if (scanner != 'JULIET'):
                    scannerXMLResult = ET.SubElement(
                        fileIssue, 'scanner', {
                            'name':
                            scanner,
                            'foundIssues':
                            str(len(issueHolder.foundIssues)),
                            'realIssues':
                            str(len(issueComparison.existingIssues)),
                            'correctLineMatches':
                            str(issueHolder.correctMatchCnt),
                            'differentLineMatches':
                            str(issueHolder.differentLineMatches),
                            'differentTypeMatches':
                            str(issueHolder.rangeMatch),
                            'differentTypeMatches':
                            str(issueHolder.rangeMatch),
                            'noneMatching':
                            str(issueComparison.noneMatching)
                        })

        print("=============================")
        print("========" + title + " SUMMARY========")
        print("=============================")
        print("Total Issues: " + str(mainResult.issueCnt))
        print("Scanners: ")

        summary = ET.SubElement(root, 'summary',
                                {'totalIssues': str(mainResult.issueCnt)})
        chartData = OrderedDict()
        chartData['Total Issues'] = mainResult.issueCnt
        for key, value in scannerResults.items():

            if (scanner != 'JULIET'):
                summaryDetail = value.getXMLSubelement(summary, 'scanner', key)
                print(key + " found " + str(value.issueCnt) + " of " +
                      str(value.realIssues))
                value.printDetailData()
                #print("\t"+str(value.withoutCWE)+" CWE")
                chartData[key] = value.issueCnt
                self.printPieChart(key, value, baseDir)

        secModelXML = ET.SubElement(root, 'securityModel')
        for key, value in securityModelResultMap.items():
            compareResultMap = value.compare()
            if (scanner != 'JULIET'):
                scannerXML = ET.SubElement(secModelXML, 'scanner',
                                           {'name': key})
                print(key)
                for weaknessClass, resultHolder in compareResultMap.items():
                    resultHolder.getXMLSubelement(scannerXML, 'weaknessClass',
                                                  weaknessClass)
                    print(weaknessClass)
                    resultHolder.printDetailData()
        #write xml
        with open(baseDir + 'report.xml', 'w') as f:
            f.write(parseString(ET.tostring(root)).toprettyxml())

        self.printChart(chartData, baseDir, title)

        htmlReport = HTMLReport(mainResult, scannerResults,
                                securityModelResultMap,
                                baseDir + "report.html")
        htmlReport.buildReport()