Photon origin restrictions
The snippet can be accessed without any authentication.
Authored by
Erick Hitter
Edited
<?php
// Rebuild Photon URL
$url = sprintf( '%s://%s?%s',
array_key_exists( 'ssl', $_GET ) ? 'https' : 'http',
substr( parse_url( 'scheme://host' . $_SERVER['REQUEST_URI'], PHP_URL_PATH ), 1 ), // see https://bugs.php.net/bug.php?id=71112 (and #66813)
$_SERVER['QUERY_STRING']
);
// Don't bother if bad data is passed
$host = parse_url( $url, PHP_URL_HOST );
if ( false === $host ) {
header( 'HTTP/1.1 400' );
die( '400 Bad Request' );
}
// Whitelist requests, with a bypass for certain referers
$referer = parse_url( $_SERVER['HTTP_REFERER'], PHP_URL_HOST );
$hosts_whitelist = array(
's2.e15r.co',
);
if ( PRIVATE_SERVICE_REFERER === $referer ) {
$hosts_whitelist = array();
}
// Whitelist file types for redirection
$type = parse_url( $url, PHP_URL_PATH );
$type = pathinfo( $type, PATHINFO_EXTENSION );
$allowed_types = apply_filters( 'allowed_types', array(
'gif',
'jpg',
'jpeg',
'png',
) );
// Redirect to the original URL if not whitelisted
if ( ! empty( $hosts_whitelist ) && ! in_array( $host, $hosts_whitelist, true ) ) {
// Check type before redirecting
if ( ! in_array( $type, $allowed_types, true ) ) {
@header( 'HTTP/1.1 400' );
die( '400 Bad Request' );
}
@header( 'HTTP/1.1 302' );
header( "Location: $url", true, 302 );
}
Please register or sign in to comment