Content · Programming · PHP

Preventing Server-Side Request Forgery

Restrict outbound request destinations, protect against redirects and DNS changes, and block internal, loopback and metadata-service addresses.

1 views Published Oct 17, 2026 Updated Oct 17, 2026 Know-Stuff

Restrict outbound request destinations, protect against redirects and DNS changes, and block internal, loopback and metadata-service addresses.

Before using it, identify which data, connection or runtime state the operation reads or changes. This avoids examples that appear to work but apply to a different context.

How Does This Work?


Restrict outbound request destinations, protect against redirects and DNS changes, and block internal, loopback and metadata-service addresses.

Syntax:

See the complete steps in the practical examples below.

Parameters and Return Value


This is an application workflow rather than one built-in function. Its inputs are request fields, configuration and application state described in each example.

The operation produces an HTTP response or updates application state as shown in the examples.

Example 1: Basic Usage


<?php

$host = parse_url("https://public.example.test/resource", PHP_URL_HOST);
if ($host === null || $host === false) { throw new InvalidArgumentException("Invalid host"); }
// A complete implementation also validates all DNS answers at connection time.

Restrict outbound request destinations, protect against redirects and DNS changes, and block internal, loopback and metadata-service addresses.

Example 2: Another Case


<?php

$url = "https://public.example.test/data.json";
$scheme = parse_url($url, PHP_URL_SCHEME);
if ($scheme !== "https") { throw new InvalidArgumentException("HTTPS required"); }
// Protocol checks alone do not prevent SSRF.

The second example changes the input or surrounding conditions, which matters when choosing this API for real application code.

Practical Example


<?php

$curlHandle = curl_init("https://public.example.test/api");
curl_setopt_array($curlHandle, [CURLOPT_PROTOCOLS_STR => "https", CURLOPT_FOLLOWLOCATION => false, CURLOPT_TIMEOUT => 5]);
// Restrict DNS resolution and outgoing IP targets separately.
curl_close($curlHandle);

The practical example is a teaching scenario. Change sample configuration and credentials before using a similar design in an application.

Important Behavior and Edge Cases


  • Apply authentication, authorization, input limits and failure handling where the workflow crosses trust boundaries.
  • Relevant PHP environment: PHP core. Ensure the required extension and operating-system capabilities are present.
  • Check results and release resources where necessary; successful syntax alone does not guarantee a successful operation.

Comparison With Related Functions


OptionWhen to Use It
Preventing Server-Side Request ForgeryRestrict outbound request destinations, protect against redirects and DNS changes, and block internal, loopback and metadata-service addresses.
PHP web application designUse this related operation for its different responsibilities; do not assume identical inputs or return values.

Common Beginner Mistakes


MistakeCorrect Approach
Relying on a single mitigationCombine validation, authorization, encoding and deployment controls as appropriate.
Trusting client-provided state without verificationRevalidate server-side with integrity and replay controls.
Exposing secrets in logs or error responsesReturn sanitized messages and keep sensitive context in protected systems.

Key Takeaways


  • Restrict outbound request destinations, protect against redirects and DNS changes, and block internal, loopback and metadata-service addresses.
  • Apply authentication, authorization, input limits and failure handling where the workflow crosses trust boundaries.
  • Validate inputs and handle failure conditions before integrating this operation into a production workflow.

Restrict outbound request destinations, protect against redirects and DNS changes, and block internal, loopback and metadata-service addresses. Use the appropriate runtime and treat any environment-dependent output as an example, not a guaranteed result.

Share this resourceSend this page to someone who may find it useful.