Fasáda SafeFetch
Všetko ide cez jednu fasádu, RoundlyConsulting\SafeFetch\Facades\SafeFetch (globálny alias SafeFetch), ktorá je skratkou nad singletonom SafeFetchManager, a cez makro Http::safe() na HTTP klientovi Laravelu:
use Illuminate\Support\Facades\Http;
use RoundlyConsulting\SafeFetch\Facades\SafeFetch;
Http::safe()->withToken($token)->post($url, $payload); // guard any Laravel request
SafeFetch::guard(Http::withToken($token), $policy)->post($url); // the same, without the macro
SafeFetch::http($policy)->get($url); // a new guarded request
$vetted = SafeFetch::vet($url); // VettedDestination, or DestinationRejected / DestinationUnavailable
SafeFetch::allows($url); // bool — never throws a verdict
SafeFetch::precheck($url); // CanonicalUrl — every rule except the DNS lookup
$page = SafeFetch::fetch($url, maxBytes: 1_000_000); // a capped GET into memory
$file = SafeFetch::download($url, $path, maxBytes: 50_000_000); // the same GET, streamed to a file
SafeFetch::truncated($response); // was a guarded response cut at maxResponseBytes?
SafeFetch::policy(); // the configured DestinationPolicy, to tighten or loosen per call
SafeFetch::networks()->isPrivate('169.254.169.254'); // true — cloud metadata
SafeFetch::urls()->canonicalise('HTTPS://Example.COM.:443/a?b#frag'); // CanonicalUrl: https://example.com/a?bMetódy manažéra
| Metóda | Vracia | Čo robí |
|---|---|---|
vet(string $url, ?DestinationPolicy $policy = null) | VettedDestination | Posúdi URL adresu podľa pravidiel (predvolene nakonfigurovaných): jej prestavanú URL a každú adresu, na ktorú sa preložila. Vyhodí DestinationRejected, alebo DestinationUnavailable, ak sa hostiteľ nepreloží. |
allows(string $url, ?DestinationPolicy $policy = null) | bool | Či pravidlá URL adresu pustia. Verdikt nikdy nevyhodí ako výnimku. |
precheck(string $url, ?DestinationPolicy $policy = null) | CanonicalUrl | Všetky pravidlá okrem prekladu DNS — pri ukladaní a vo formulároch. Vyhodí DestinationRejected. |
http(?DestinationPolicy $policy = null) | PendingRequest | Nová chránená požiadavka z továrne HTTP klienta Laravelu — Http::safe() bez makra. |
guard(PendingRequest $request, ?DestinationPolicy $policy = null) | PendingRequest | Ochráni požiadavku, ktorú ste zostavili (Http::withToken($t)) — overenú, pripnutú a skontrolovanú pri každom kroku. To, čo volá Http::safe(). |
fetch(string $url, ?int $maxBytes = null, ?int $timeout = null, ?string $accept = null, array $headers = [], ?bool $followRedirects = null, ?DestinationPolicy $policy = null) | FetchedResponse | Chránený GET do pamäte s obmedzeným telom. Vyhodí DestinationRejected, DestinationUnavailable alebo FetchFailed. |
download(string $url, string $path, ?int $maxBytes = null, ?int $timeout = null, ?string $accept = null, array $headers = [], ?bool $followRedirects = null, ?DestinationPolicy $policy = null) | DownloadedFile | Ten istý GET streamovaný do súboru na $path; adresár musí existovať. |
truncated(Response|ResponseInterface $response) | bool | Či bola chránená odpoveď orezaná na maxResponseBytes z pravidiel. Bez stavu: číta hlavičku Safe-Fetch-Truncated. |
policy() | DestinationPolicy | Predvolené nakonfigurované pravidlá, ktoré sprísnite alebo uvoľníte pre jedno volanie. |
networks() | Handles\Networks | Tabuľka blokovaných sietí: isPrivate(), isBlockedHostname(), blockedRanges(). |
urls() | Handles\Urls | Parser URL adries a riešenie presmerovaní, ktoré používa ochrana: canonicalise(), resolveRedirect(). |
SafeFetch::fake(array $dns = []) | Testing\SafeFetchFake | Len na fasáde — nahrávací fake (pozrite Testovanie). |
SafeFetch::fakeDns(array $records = []) | Testing\FakeHostResolver | Len na fasáde — odpovedá na preklady mien z tabuľky. |
Po nainštalovaní SafeFetch::fake() sa dá každé overenie fake volať aj na fasáde — pozrite Testovanie. vetHop() je na manažéri verejná, ale interná: je to volanie middleware ochrany pre každý krok, aby fake videl všetky kroky. SafeFetchManager::TRUNCATED_HEADER ('Safe-Fetch-Truncated') pomenúva hlavičku orezania.
Makro Http::safe()
PendingRequest::safe(?DestinationPolicy $policy = null): PendingRequest poskytuje Http::safe(), Http::withToken($t)->safe() aj $pool->safe(). Ak by iný balík zaregistroval makro safe po tomto, potichu by ho nahradil, preto bezpečnostne kritický kód volá SafeFetch::guard() alebo SafeFetch::http().
Dátové objekty
V RoundlyConsulting\SafeFetch\DataTransferObjects, všetky final readonly:
| Trieda | Polia a metódy |
|---|---|
DestinationPolicy | Pravidlá nad tabuľkou blokovaných sietí — pozrite Pravidlá cieľov. |
RedirectPolicy | enabled, max, statuses, allowDowngrade, forwardHeaders, statusesGiven; none(), methodPreserving(), enabled(), withStatuses(), forwardHeaders(), allowingDowngrade(), max(), follows(). |
CanonicalUrl | scheme, host, port, ipLiteral, pathAndQuery; toString(), origin(). |
VettedDestination | url (prestavaná), scheme, host, port, ipLiteral, addresses (každá overená adresa); origin(), resolveEntry(): ?string, pinningOptions(): array (bez curl cannot_pin), connectsTo(string $address): bool. |
FetchOptions | maxBytes, timeout, accept, headers, followRedirects — null znamená nakonfigurovanú predvolenú hodnotu. |
FetchedResponse | status, body, contentType, url, headers; header(string $name): ?string, json(?string $key = null, mixed $default = null): mixed. |
DownloadedFile | status, path, bytes, contentType, url, headers; header(string $name): ?string. |
Ďalšie verejné typy: Enums\Reason a výnimky (Verdikty a výnimky), Contracts\HostResolver a Support\SystemHostResolver, Support\PrivateNetworks (URL adresy a blokované siete), Rules\SafeUrl, Commands\CheckCommand, Events\DestinationRefused a Testing\SafeFetchFake, Testing\FakeHostResolver a Testing\RecordedVet. Všetko ostatné v Support\ a Http\ je interné.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.