Upload files to "redflare/modules"

This commit is contained in:
2026-06-21 17:54:15 +00:00
parent 2230d24e5f
commit 3f2bb5309f
5 changed files with 677 additions and 0 deletions
+64
View File
@@ -0,0 +1,64 @@
from __future__ import annotations
import time
from redflare.core.models import Finding, ModuleResult, Target
from .base import Module, ModuleContext
from .http import request
SECURITY_HEADERS = {
"strict-transport-security": "HSTS",
"content-security-policy": "Content Security Policy",
"x-content-type-options": "MIME sniffing protection",
"referrer-policy": "Referrer Policy",
"permissions-policy": "Permissions Policy",
}
class HeaderModule(Module):
name = "http_headers"
description = "Inspect HTTP status, redirects, server metadata, and security headers"
def run(self, target: Target, context: ModuleContext) -> ModuleResult:
started = time.monotonic()
result = ModuleResult(self.name, target.url)
try:
context.emit(target.url, self.name, "progress", f"Requesting {target.url}")
response = request(target.url, context.timeout, method="GET", max_body=200_000)
missing = [header for header in SECURITY_HEADERS if header not in response.headers]
result.observations.update(
{
"status": response.status,
"final_url": response.url,
"headers": response.headers,
"body_bytes_sampled": len(response.body),
"missing_security_headers": missing,
}
)
context.emit(
target.url,
self.name,
"info",
f"HTTP {response.status}; final={response.url}; sampled={len(response.body)} bytes",
)
if missing:
result.findings.append(
Finding(
context.run_id,
target.url,
self.name,
"security-headers",
"Common security headers are missing",
"low",
0.95,
"The response omitted: " + ", ".join(missing),
{"status": response.status, "missing": missing},
["headers", "hardening"],
)
)
except Exception as exc:
result.status = "error"
result.errors.append(f"{type(exc).__name__}: {exc}")
result.duration_seconds = round(time.monotonic() - started, 4)
return result