Hazina implements defense-in-depth security with encryption, input validation, secure headers, rate limiting, and automated vulnerability scanning.
Please DO NOT create public GitHub issues for security vulnerabilities.
Instead, report security issues to: security@hazina.ai (or your organization's security email)
Include:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)
We aim to respond within 48 hours and provide a fix within 7 days for critical issues.
| Version | Supported |
|---|---|
| 1.x | ✅ |
| < 1.0 | ❌ |
Encrypted Storage:
- API keys encrypted at rest using ASP.NET Core Data Protection
- Keys stored in
%LocalAppData%\Hazina\DataProtection-Keys - Automatic key rotation every 90 days
Usage:
services.AddHazinaSecurity();
// Store encrypted secret
await secretManager.StoreSecretAsync("openai-key", apiKey);
// Retrieve and decrypt
var key = await secretManager.GetSecretAsync("openai-key");Environment Variable Fallback:
- Automatically falls back to environment variables
- Prevents accidental secret commits
- Supports Azure Key Vault, AWS Secrets Manager integration
Protection Against:
- SQL Injection
- Command Injection
- XSS (Cross-Site Scripting)
- Path Traversal
- LDAP Injection
Validation Patterns:
services.AddHazinaInputValidation();
// Validate SQL input
var result = validator.ValidateInput(input, InputValidationType.Sql);
if (!result.IsValid)
{
return BadRequest("Potential SQL injection detected");
}
// Sanitize HTML
var safe = validator.SanitizeInput(userInput, SanitizationType.Html);
// Validate file paths
if (!validator.IsSafeFilePath(path, basePath))
{
return Forbid("Path traversal detected");
}Detection Patterns:
- SQL:
UNION,DROP,--,;,xp_,sp_ - Command:
|,&,;,$,`,() - XSS:
<script>,javascript:,on*= - Path:
../,..\\,~
Implemented Headers:
Strict-Transport-Security: HSTS with 1-year max-ageContent-Security-Policy: Restrict resource originsX-Content-Type-Options: Prevent MIME sniffingX-Frame-Options: Clickjacking protectionX-XSS-Protection: Legacy XSS filterReferrer-Policy: Control referrer informationPermissions-Policy: Feature permissions
Configuration:
app.UseHazinaSecurityHeaders(options => {
options.EnableStrictTransportSecurity = true;
options.ContentSecurityPolicy = "default-src 'self'; script-src 'self' 'unsafe-inline'";
options.XFrameOptionsValue = "DENY";
});Default CSP:
default-src 'self';
script-src 'self' 'unsafe-inline' 'unsafe-eval';
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self' data:;
connect-src 'self';
frame-ancestors 'none';
Protection Against:
- Brute force attacks
- DDoS attacks
- API abuse
- Resource exhaustion
Token Bucket Algorithm:
- Configurable request limits
- Per-client tracking (IP-based)
- Automatic token refill
- Custom client identification
Configuration:
app.UseHazinaRateLimiting(options => {
options.MaxRequests = 100; // 100 requests
options.WindowSeconds = 60; // per 60 seconds
options.RetryAfterSeconds = 60; // Retry-After header
options.ExcludedPaths = new List<string> { "/health", "/metrics" };
});Response Headers:
X-RateLimit-Limit: Maximum requests allowedX-RateLimit-Remaining: Requests remainingX-RateLimit-Reset: Unix timestamp of window resetRetry-After: Seconds until retry (when limited)
Distributed Tracing:
- Unique request identifier
- Tracks requests across services
- Enables audit logging
- Facilitates incident investigation
Configuration:
app.UseHazinaCorrelationId(options => {
options.HeaderName = "X-Correlation-ID";
options.IncludeInResponse = true;
options.CorrelationIdGenerator = () => Guid.NewGuid().ToString("N");
});Usage:
var correlationId = HttpContext.GetCorrelationId();
logger.LogInformation("Processing request {CorrelationId}", correlationId);Recommended Patterns:
JWT Bearer Tokens:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => {
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "hazina",
ValidAudience = "hazina-api",
IssuerSigningKey = new SymmetricSecurityKey(key)
};
});API Key Authentication:
services.AddAuthentication()
.AddScheme<ApiKeyAuthenticationOptions, ApiKeyAuthenticationHandler>("ApiKey", options => {
options.HeaderName = "X-API-Key";
options.ValidateKey = async (key) => {
return await apiKeyService.ValidateAsync(key);
};
});Automated Scans:
- Trivy: Filesystem and Docker image scanning
- CodeQL: Static application security testing (SAST)
- Dependabot: Dependency vulnerability alerts
- SBOM: Software Bill of Materials generation
CI/CD Integration:
# .github/workflows/build-and-test.yml
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
severity: 'CRITICAL,HIGH'
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
queries: +security-and-qualitySARIF Upload: All security findings are uploaded to GitHub Security tab for tracking and remediation.
Docker Hardening:
- Multi-stage builds (smaller attack surface)
- Non-root user execution
- Read-only root filesystem (where possible)
- Security updates in base image
- Minimal base image (aspnet:9.0)
Dockerfile Best Practices:
# Use official Microsoft images
FROM mcr.microsoft.com/dotnet/aspnet:9.0
# Install security updates
RUN apt-get update && apt-get upgrade -y
# Create non-root user
RUN groupadd -r hazina && useradd -r -g hazina hazina
# Switch to non-root user
USER hazina
# Health check
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080/healthEncryption at Rest:
- API keys encrypted using Data Protection API
- Database connection strings in secure configuration
- Secrets in environment variables or key vaults
Encryption in Transit:
- TLS 1.2+ required for HTTPS
- Certificate validation enforced
- HSTS header enforces HTTPS
PII Protection:
- Structured logging avoids logging secrets
- Sensitive data masked in logs
- GDPR-compliant data handling patterns
Security Events Logged:
- Authentication attempts (success/failure)
- Authorization failures
- Rate limit violations
- Input validation failures
- API key usage
- Suspicious patterns
Log Format:
{
"@timestamp": "2026-01-05T10:30:00.123Z",
"level": "Warning",
"message": "Rate limit exceeded",
"correlationId": "abc123",
"clientId": "192.168.1.100",
"path": "/api/chat",
"severity": "Medium"
}- Never commit secrets to version control
- Use environment variables for configuration
- Validate all user input before processing
- Sanitize output to prevent XSS
- Use parameterized queries to prevent SQL injection
- Keep dependencies updated (use Dependabot)
- Run security scans before committing
- Follow principle of least privilege
- Enable security logging in production
- Review security alerts regularly
- Rotate secrets every 90 days minimum
- Use strong passwords (16+ characters, mixed case, symbols)
- Enable TLS/HTTPS for all public endpoints
- Configure firewall rules to restrict access
- Monitor security logs for suspicious activity
- Keep systems patched and up to date
- Backup encryption keys securely
- Test disaster recovery procedures
- Implement network segmentation
- Use intrusion detection systems
- OWASP Top 10: Protection against all major web vulnerabilities
- CWE/SANS Top 25: Mitigation of most dangerous software weaknesses
- GDPR: Data protection and privacy-by-design patterns
- SOC 2: Security, availability, confidentiality controls
- NIST: Cybersecurity framework alignment
| Control | Implementation |
|---|---|
| AC-1 | Access Control Policy (JWT, API Keys) |
| AU-2 | Audit Events (Structured Logging) |
| IA-2 | Identification & Authentication (Multi-provider) |
| SC-8 | Transmission Confidentiality (TLS 1.2+) |
| SC-13 | Cryptographic Protection (Data Protection API) |
| SC-28 | Protection at Rest (Encrypted secrets) |
| SI-3 | Malicious Code Protection (Trivy, CodeQL) |
| SI-10 | Input Validation (Comprehensive validators) |
Static Analysis:
- SonarQube
- Security Code Scan
- .NET Security Guard
Dynamic Analysis:
- OWASP ZAP
- Burp Suite
- Postman Security Tests
Container Scanning:
- Trivy
- Snyk Container
- Clair
Dependency Scanning:
- Dependabot
- Snyk Open Source
- WhiteSource
Secret Scanning:
- TruffleHog
- GitGuardian
- GitHub Secret Scanning
- Detection: Monitor logs, alerts, security events
- Containment: Isolate affected systems
- Eradication: Remove malicious code, patch vulnerabilities
- Recovery: Restore systems from clean backups
- Lessons Learned: Update security controls
- Security Team: security@hazina.ai
- Incident Response: ir@hazina.ai
- Emergency: +1-555-SECURITY
| Severity | Response Time | Resolution Target |
|---|---|---|
| Critical | 1 hour | 24 hours |
| High | 4 hours | 72 hours |
| Medium | 1 business day | 7 days |
| Low | 3 business days | 30 days |
- Mutual TLS (mTLS) for service-to-service authentication
- Hardware Security Module (HSM) integration
- Advanced threat detection with machine learning
- Automated penetration testing
- Security Information and Event Management (SIEM) integration
- Zero Trust Network Access (ZTNA)
- OWASP Top 10
- CWE Top 25
- NIST Cybersecurity Framework
- Microsoft Security Development Lifecycle
- GDPR Compliance
- 2026-01-05: Initial security policy with Phase 1 security hardening
- Future: Planned enhancements for advanced threat detection
Last Updated: 2026-01-05 Version: 1.0.0