Spaces:
Paused
Paused
| const { execSync } = require('child_process'); | |
| const fs = require('fs'); | |
| const path = require('path'); | |
| class SecurityAuditor { | |
| constructor() { | |
| this.results = { | |
| timestamp: new Date().toISOString(), | |
| vulnerabilities: [], | |
| summary: {}, | |
| }; | |
| } | |
| runNpmAudit() { | |
| try { | |
| const output = execSync('npm audit --json', { encoding: 'utf-8' }); | |
| const auditData = JSON.parse(output); | |
| this.results.vulnerabilities.push(...auditData.vulnerabilities); | |
| this.results.summary.npm = { | |
| total: auditData.metadata.vulnerabilities.total, | |
| critical: auditData.metadata.vulnerabilities.critical, | |
| high: auditData.metadata.vulnerabilities.high, | |
| moderate: auditData.metadata.vulnerabilities.moderate, | |
| low: auditData.metadata.vulnerabilities.low, | |
| }; | |
| } catch (error) { | |
| console.error('npm audit failed:', error.message); | |
| } | |
| } | |
| checkSecurityHeaders() { | |
| const required = ['helmet', 'express-rate-limit', 'csurf', 'sanitize-html']; | |
| const packageJson = require('../../package.json'); | |
| const missing = required.filter( | |
| pkg => !packageJson.dependencies[pkg] && !packageJson.devDependencies[pkg] | |
| ); | |
| this.results.summary.securityPackages = { | |
| required, | |
| missing, | |
| installed: required.length - missing.length, | |
| }; | |
| } | |
| generateReport() { | |
| const reportPath = path.join(__dirname, '../reports/audit-report.json'); | |
| fs.writeFileSync(reportPath, JSON.stringify(this.results, null, 2)); | |
| console.log('Security Audit Report:'); | |
| console.log(JSON.stringify(this.results.summary, null, 2)); | |
| return this.results; | |
| } | |
| run() { | |
| console.log('Running security audit...'); | |
| this.runNpmAudit(); | |
| this.checkSecurityHeaders(); | |
| return this.generateReport(); | |
| } | |
| } | |
| if (require.main === module) { | |
| const auditor = new SecurityAuditor(); | |
| auditor.run(); | |
| } | |
| module.exports = SecurityAuditor; | |