मुख्य कंटेंट तक स्किप करें
Version: नवीनतम

रिपोर्ट और फाइंडिंग्स API

पूरा स्कैन होने के बाद Scanner::run() एक stdClass रिपोर्ट लौटाता है। Scanner::getReport() उसी वर्तमान रिपोर्ट आकार को लौटाता है। पकड़ी गई स्कैन विफलता पर run() false लौटाता है; स्कैनर instance पर getLastError() जांचें।

शीर्ष-स्तरीय रिपोर्ट कॉन्ट्रैक्ट

प्रॉपर्टीप्रकारअर्थ
scannedintस्कैन की गई फ़ाइलों की संख्या।
detectedintपहचाने गए मैलवेयर मिलानों की संख्या।
verifiedByChecksumintchecksum सत्यापन से स्वीकार की गई फ़ाइलों की संख्या।
removed, ignored, edited, quarantine, whitelistarrayमिलान कार्रवाई से प्रभावित पथ या रिकॉर्ड।
infectedFoundarrayस्कैन के दौरान मिले संक्रमित फ़ाइल पथ।
fileHashesarrayस्कैन के दौरान एकत्र किया गया फ़ाइल हैश metadata।
findingsarrayफ़ाइल, integrity, archive, और पूरक विश्लेषण से canonical finding records।
coveragearrayपूर्णता, गणनाएं, और skip कारण।
diagnosticsमौजूद होने पर arrayगैर-गंभीर analysis या definition update त्रुटियां।
signature_indexesarrayअंतर्निहित और वैकल्पिक reputation-index metadata।
inventoryमौजूद होने पर arrayपहचानी गई प्लेटफ़ॉर्म component inventory।

नई रिपोर्ट फ़ील्ड को किसी minor release में जोड़ा जा सकता है। उपभोक्ताओं को आवश्यक फ़ील्ड पढ़ने चाहिए, अज्ञात फ़ील्ड सहन करने चाहिए, और वैकल्पिक प्रॉपर्टी के लिए isset() का उपयोग करना चाहिए।

सफलता और विफलता संभालें

$report = $scanner->run();

if ($report === false) {
throw new RuntimeException($scanner->getLastError() ?: 'Scan failed.');
}

foreach ($report->findings as $finding) {
if ($finding['severity'] === 'danger') {
// Send the finding to your incident workflow.
}
}

गैर-शून्य detected गिनती को निष्पादन विफलता न मानें। फाइंडिंग्स ऐसे कोड या अखंडता स्थितियों की पहचान करती हैं जिनकी समीक्षा आवश्यक है। वे मंशा स्थापित नहीं करतीं और न ही deletion को अधिकृत करती हैं।

फाइंडिंग रिकॉर्ड कॉन्ट्रैक्ट

हर canonical finding में ये फ़ील्ड होते हैं:

फ़ील्डप्रकारअर्थ
idstringkind, provider, rule ID, और सामान्यीकृत subject से प्राप्त स्थिर SHA-256 identifier।
kindstringfinding श्रेणी, जैसे malware, integrity, या पूरक analysis प्रकार।
subjectstringफ़ाइल पथ या स्कैन किया हुआ subject।
rule_idstringdetecting rule या indicator के लिए स्थिर identifier।
severitystringdetector द्वारा दी गई गंभीरता, आमतौर पर warn या danger
messagestringमनुष्यों के लिए पढ़ने योग्य detection विवरण।
statusstringवर्तमान finding स्थिति। नई findings open से शुरू होती हैं।
evidencearrayउपलब्ध होने पर line, match, या content_hash जैसा संदर्भ।
providerstringdetector स्रोत, जैसे builtin
first_seen_at, last_seen_atstringfinding अवलोकन के ISO 8601 timestamps।

चेतावनियों को deduplicate करते समय rule_id, subject, और देखा गया content hash रखें। फ़ाइल बदलने पर पंक्ति संख्या या snippet बदल सकता है।

कवरेज परिणाम का हिस्सा है

रिपोर्ट में discovered, eligible, scanned, skipped, verified, cached, और errors के लिए कवरेज गणनाएं शामिल हैं। coverage.reasons छोड़ी गई फ़ाइलों को path, extension, oversized, excluded, unreadable, और archive_limit के आधार पर अलग करता है।

स्कैन को पूर्ण स्वीकार करने से पहले यह जांच करें:

$coverage = $report->coverage;

if (empty($coverage['complete']) || !empty($coverage['errors'])) {
throw new RuntimeException('Scan coverage is incomplete.');
}

Offset और limit batch, पढ़ने योग्य न होने वाली फ़ाइलें, फ़ाइल-आकार सीमाएं, और archive सीमाएं परिणाम को अपूर्ण बना सकती हैं। शून्य फाइंडिंग वाला पूर्ण परिणाम, शून्य फाइंडिंग वाले आंशिक परिणाम से अधिक महत्वपूर्ण होता है।

डायग्नोस्टिक्स और बाहरी डेटा

diagnostics गैर-गंभीर त्रुटियों की रिपोर्ट करता है। उदाहरण के लिए, update विफल होने पर स्कैनर cached Maltrail definitions के साथ जारी रह सकता है। diagnostics को findings के साथ सहेजें ताकि operator स्वच्छ परिणाम और सीमित विश्लेषण में अंतर कर सके।

signature_indexes अंतर्निहित malware और legacy-core indexes के लिए रिकॉर्ड गणना और source hashes दिखाता है। जब सक्रिय Maltrail store मौजूद हो, तो इसमें domain-index metadata और उसका update समय भी शामिल होता है। इन मानों का उपयोग audit trails के लिए करें, finding evidence के विकल्प के रूप में नहीं।

रिपोर्ट serializing

इन-मेमोरी रिपोर्ट संग्रहीत करते समय त्रुटि प्रबंधन के साथ json_encode() का उपयोग करें:

$json = json_encode($report, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);

if ($json === false) {
throw new RuntimeException('Could not serialize scan report: ' . json_last_error_msg());
}

जब स्कैनर को बाहरी tooling के लिए भी फ़ाइल लिखनी हो तो setReportFormat('json') या setReportFormat('sarif') का उपयोग करें। रिपोर्ट, checkpoints, backups, और quarantined फ़ाइलों के लिए स्कैन किए गए प्रोजेक्ट के बाहर की डायरेक्टरी चुनें।