Open source
Safe Fetch for Laravel
composer require roundly-consulting/safe-fetch-for-laravelPrehľad
Ochrana pred SSRF pre HTTP klienta Laravelu. Posielajte zo servera požiadavky na URL adresy, ktoré nemáte pod kontrolou — ciele webhookov, náhľady odkazov, URL avatarov, feedov a importov — bez toho, aby sa dostali do vašej vlastnej siete. Každá URL adresa sa prísne naparsuje a prestavia, každá adresa, na ktorú sa hostiteľ preloží, musí byť verejná a spojenie sa pripne presne na tieto adresy, vrátane presmerovaní. Licencia MIT, bez databázy, postavené len na HTTP klientovi Laravelu a balíkoch Roundly enums a package-toolkit.
Čo získate
Jedno volanie na akejkoľvek požiadavke
Http::safe() chráni HTTP volania Laravelu, ktoré už píšete — tokeny, opakovania, pooly a ďalší middleware fungujú ďalej. SafeFetch::guard() a http() robia to isté bez makra.
Interné ciele sa odmietnu
Privátne, loopback, link-local, carrier-grade NAT a cloudové metadátové adresy — AWS, Google Cloud, Azure, Alibaba, Oracle, OpenStack — v každom zápise: číselné tvary, IPv4 vnútri IPv6, mená smerujúce dovnútra.
Pripnuté DNS, overené spojenie
Meno sa preloží raz, posúdi sa každá adresa, curl sa pripne presne na ne bez proxy a bez opätovne použitého spojenia a pripojená adresa sa overí pred odoslaním prvého bajtu aj po ňom.
Presmerovania pod kontrolou
Predvolene vypnuté. Po zapnutí sa každý krok znovu overí a pripne, platí limit krokov, žiadny prechod z https na http, prihlasovacie údaje zostanú pri prvom origine a ďalej idú len hlavičky, ktoré určíte.
Obmedzené fetch a download
fetch() načíta GET do pamäte, download() ho streamuje do súboru, ktorý sa nahradí až po úspechu — oba s limitom bajtov počítaným po dekódovaní, jedným časovým rozpočtom a chybami, ktoré povedia, či pomôže opakovanie.
Validácia, udalosti a kontrola prostredia
Pravidlo SafeUrl a safe_url s jednou neutrálnou správou, udalosť DestinationRefused pri každom odmietnutí a safe-fetch:check pre verdikt URL adresy alebo kontrolu prostredia, ako text alebo JSON.
Fasáda, DI alebo akcie
Jedna fasáda SafeFetch, injektovateľný manažér alebo jednoúčelové akcie — a k tomu nahrávací fake, ktorý ponechá skutočnú ochranu, a DNS tabuľka pre testy.
Dokumentácia
Použitie
Kde sa balík hodí — odosielanie webhookov, náhľady odkazov, importy a médiá z URL, integrácie na adresy zákazníkov a upozornenia na SSRF.
Inštalácia
Inštalácia cez Composer — bez migrácií, s bezpečnými predvolenými hodnotami — a voliteľne publikovanie konfigurácie, prekladov a kontrola prostredia.
Konfigurácia
Každý kľúč config/safe-fetch.php — http, porty, zoznamy hostiteľov a rozsahov, blokovanie hostiteľov aplikácie, presmerovania, limity fetch, resolver.
Fasáda SafeFetch
Prehľad fasády SafeFetch — vet, allows, precheck, guard, http, fetch, download, truncated, policy, networks, urls — a makra Http::safe().
DI a akcie
Bez fasády: injektujte SafeFetchManager alebo zavolajte jednoúčelovú akciu — každá akcia so signatúrou execute() a metódou fasády.
Chránené požiadavky
Http::safe() krok za krokom — pripnutý curl handler, overenie každého kroku, kontroly pred a po odoslaní, odmietnuté voľby, pooly a limit odpovede.
Načítanie a sťahovanie
SafeFetch::fetch() načíta obmedzený, chránený GET do pamäte; download() ho streamuje do súboru nahradeného až po úspechu. Chyby a opakovanie.
Validácia a predbežná kontrola
Pravidlo SafeUrl a textové pravidlo safe_url s jednou neutrálnou správou, SafeUrl::withoutLookup() a SafeFetch::precheck() pri ukladaní.
Pravidlá cieľov
DestinationPolicy — metódy, ktoré pre jedno volanie sprísnia alebo uvoľnia pravidlá, vzory hostiteľov, poradie pravidiel, privátni hostitelia.
Presmerovania
Presmerovania sú predvolene vypnuté; po zapnutí sa každý krok overí a pripne, s limitom krokov, bez prechodu na http a s údajmi pri origine.
URL adresy a blokované siete
Ako sa URL adresy kanonizujú, 26 blokovaných rozsahov, IPv4 vnútri IPv6, cloudové metadáta, pomocné metódy na kontrolu a vlastný resolver.
Verdikty a výnimky
Enum Reason, hierarchia výnimiek, retryable() a blockedBy(), neutrálne správy, ktoré nikdy neuvádzajú URL adresu, a pomenované konštruktory.
Udalosti
DestinationRefused pri každom odmietnutí s dôvodom, hostiteľom, pravidlom a miestom posúdenia — nikdy s URL adresou — pripravené na upozornenia.
Príkazy Artisan
safe-fetch:check posúdi URL adresu alebo skontroluje prostredie, ako text alebo JSON; php artisan about ukáže aktívne pravidlá len ako počty.
Použitie vo vlastnom balíku
Recepty pre balíky, ktoré načítavajú URL svojich používateľov — pravidlá bez uvoľnení hostiteľa, manažér, obmedzovač, opakovanie a predbežná kontrola.
Model hrozieb
Proti čomu ochrana bráni — rebinding, maskované adresy, presmerovania, proxy, triky parsera, prezradzujúce chyby — a čo nezaručuje.
Testovanie
SafeFetch::fake() zaznamená každý verdikt a ponechá skutočnú ochranu; fakeDns() odpovedá na preklady z tabuľky; všetky overenia a pripnutie v teste.
Požiadavky
PHP 8.4+, Laravel 13, ext-curl na odosielanie chránených požiadaviek, ext-intl pre medzinárodné mená, dva balíky Roundly — bez databázy.
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.