The SSRF guard calls assert_public_url to resolve target hostnames via DNS, blocking requests to private, loopback, or metadata addresses and enforcing manual per-hop redirect re-validation.
sequenceDiagram
autonumber
actor Engine as Outreach Probe
participant Guard as safe_get()
participant DNS as DNS Resolver
participant Target as External Server
Engine->>Guard: safe_get(URL)
Guard->>DNS: Resolve Hostname
DNS-->>Guard: Resolved IP
alt IP is Private / Loopback / Metadata
Guard-->>Engine: Raise BlockedURLError
else IP is Public
Guard->>Target: GET (Range: bytes=0-0, allow_redirects=False)
alt Response is 30x Redirect
Target-->>Guard: 30x Redirect Location
Guard->>DNS: Resolve Redirect Hostname
DNS-->>Guard: Redirect IP
Note over Guard: Re-verify public IP per hop
else Response is 200 OK
Target-->>Guard: Stream First Byte
Guard-->>Engine: 200 OK Status
end
endReferenced by