Blocked address ranges
The following ranges are blocked by default:Two enforcement points
A blocked target is caught at one of two places, depending on whether the URL’s host is a literal IP or a hostname. Literal IP, before any request. If the post-substitution URL’s host is a literal IP inside a blocked range, the press is refused before a connection is attempted. This surfaces as aVALIDATION_ERROR:
SCRIPT_ERROR:
DNS rebinding protection
Validation happens after DNS resolution, not just on the literal URL. This prevents DNS rebinding attacks, where a public hostname resolves to a private IP. The safe dialer resolves the hostname once, rejects the request if any resolved A/AAAA record lands in a blocked range, and then dials by the resolved IP rather than re-resolving the hostname. Dialing by the already-checked IP closes the rebinding window where an attacker returns a public IP on the first lookup and a private IP on the second. So if the hostnameapi.attacker.example resolves to 10.0.0.1 at press time, the request is blocked even though the URL does not look like a private address.
Escape hatch 1: per-button flag
To allow a specific button to target a private address, pass--allow-private-networks at create time. The flag applies only to HTTP (--url) buttons:
Escape hatch 2: environment variable
To allow all HTTP buttons to target private networks in a given environment, set:Example: internal service in a container network
Related
- HTTP API buttons —
--allow-private-networksflag reference - Security overview — full threat model
- Template encoding — injection protection for URL and body values