The application implements a strict Content Security Policy to prevent XSS attacks:
default-src 'self'- Only load resources from same originscript-src- Whitelist for scripts (self, Google Analytics, CDNs)style-src- Whitelist for styles (self, Tailwind CDN)frame-ancestors 'none'- Prevent clickjackingbase-uri 'self'- Prevent base tag injectionform-action 'self'- Restrict form submissions
External CDN resources use SRI hashes to ensure integrity:
- PapaParse 5.3.2: Full SRI hash validation
- crossorigin="anonymous": CORS mode for CDN resources
- referrerpolicy="no-referrer": Privacy protection
- X-Content-Type-Options: nosniff - Prevent MIME-sniffing
- Referrer-Policy: strict-origin-when-cross-origin - Control referrer information
- Permissions-Policy - Disable unnecessary browser features (geolocation, microphone, camera)
All user input is strictly validated:
- CVE ID Parsing: Regex validation
/^CVE-\d{4}-\d+$/ - Whitelist Approach: Only valid CVE formats accepted
- No Direct HTML Rendering: User input never directly rendered in HTML
- CSV Data: Loaded from trusted internal source
- No User-Generated Content: All displayed data from controlled CSV
- Lazy Loading: CSV loaded only when needed (reduces attack surface)
- escapeHTML Utility: Available for sanitizing untrusted content
- textContent vs innerHTML: Preference for safe DOM methods
- Validated Input: Strict regex validation prevents injection
- Content Security Policy implemented
- SRI hashes for CDN resources (PapaParse)
- Security headers (X-Content-Type-Options, Referrer-Policy, Permissions-Policy)
- Input validation (CVE ID regex)
- crossorigin and referrerpolicy attributes on external resources
- No hardcoded secrets in client code
- HTTPS enforced (via GitHub Pages)
- Privacy-focused analytics (anonymize_ip: true)
| Control | Status | Implementation |
|---|---|---|
| XSS Prevention | β | CSP, input validation, safe DOM methods |
| CSRF Protection | β | No state-changing operations, CSP form-action |
| Clickjacking | β | frame-ancestors 'none' |
| MIME Sniffing | β | X-Content-Type-Options: nosniff |
| CDN Compromise | β | SRI hash for PapaParse |
| Data Validation | β | Regex validation for all inputs |
| Privacy | β | anonymize_ip, strict referrer policy |
- XSS Attacks: Prevented via CSP and input validation
- CDN Compromise: Mitigated via SRI (PapaParse)
- Clickjacking: Prevented via CSP frame-ancestors
- MIME Confusion: Prevented via X-Content-Type-Options
- Server-side vulnerabilities (static site on GitHub Pages)
- DDoS attacks (handled by GitHub infrastructure)
- Physical security
If you discover a security vulnerability, please report it by:
- DO NOT open a public GitHub issue
- Email the maintainer with details
- Allow reasonable time for patching before disclosure
- Use HTTPS Only: Ensure site is served over HTTPS (GitHub Pages does this)
- Keep Dependencies Updated: Regularly update PapaParse and other libraries
- Monitor CSP Violations: Check browser console for CSP violation reports
- Review Analytics: Ensure anonymize_ip remains enabled
- Audit Regularly: Review security measures quarterly
-
Tailwind CDN: Cannot use SRI due to dynamic content (CDN updates automatically)
- Mitigation: CSP whitelist, trusted CDN source
- Consider: Self-hosting Tailwind for production if SRI required
-
'unsafe-inline' in CSP: Required for Tailwind and Google Analytics
- Mitigation: Minimal inline scripts, all in trusted locations
- Future: Consider moving to script files with nonces
- β OWASP Top 10 2021: Primary vulnerabilities addressed
- β Privacy: GDPR-friendly (no PII collection, IP anonymization)
- β Modern Browser Standards: CSP Level 3, SRI support
- Implemented comprehensive CSP
- Added SRI for PapaParse
- Added security headers
- Documented security architecture
- Basic security measures
- No formal security documentation
Last Updated: November 3, 2025
Security Contact: [Your contact info]