CloudCastle Curl

SsrfGuard
in package

FinalYes

Защита от подделки запросов на стороне сервера (SSRF).

Проверяет схему URI по списку разрешённых и — если обращения во внутреннюю сеть не разрешены — блокирует хосты, разрешающиеся в приватные или зарезервированные адреса (localhost, 10/8, 192.168/16, link-local и т. п.). Проверка выполняется отдельно на каждом хопе перенаправления.

Функция gethostbynamel вызывается без указания пространства имён, что позволяет подменять разрешение имён в тестах.

Table of Contents

Methods

__construct()  : mixed
allowedSchemes()  : array<int, string>
Список разрешённых схем.
assertAllowed()  : array<int, string>|null
Проверить, допустим ли URI, и вернуть проверенные адреса.

Methods

__construct()

public __construct([array<int, string> $allowedSchemes = ['http', 'https'] ]) : mixed
Parameters
$allowedSchemes : array<int, string> = ['http', 'https']

разрешённые схемы (по умолчанию http, https)

allowedSchemes()

Список разрешённых схем.

public allowedSchemes() : array<int, string>
Return values
array<int, string> —

схемы в нижнем регистре

assertAllowed()

Проверить, допустим ли URI, и вернуть проверенные адреса.

public assertAllowed(Uri $uri, bool $allowPrivateNetwork) : array<int, string>|null

Для доменного имени возвращает разрешённые и проверенные IP-адреса — их следует зафиксировать в соединении (CURLOPT_RESOLVE), чтобы cURL не разрешал имя повторно и подключался ровно к проверенному адресу (это закрывает окно подмены DNS между проверкой и подключением). Для IP-литерала и при разрешённой приватной сети возвращает null — фиксировать нечего.

Parameters
$uri : Uri

проверяемый адрес

$allowPrivateNetwork : bool

разрешены ли приватные адреса

Tags
throws
RequestException

если хост отсутствует или схема запрещена

SsrfException

если хост ведёт во внутреннюю сеть

Return values
array<int, string>|null —

проверенные IP для фиксации или null

On this page

Search results