Validácia a predbežná kontrola
Nebezpečné URL adresy odmietnite už pri odoslaní formulára. Pravidlo prejde, keď ochrana URL adresu pustí (SafeFetch::allows()), a zlyhá pre všetko, čo nie je reťazec:
use RoundlyConsulting\SafeFetch\Rules\SafeUrl;
$request->validate(['feed' => ['required', 'string', 'max:2048', new SafeUrl]]);
$request->validate(['feed' => ['required', 'string', 'max:2048', 'safe_url']]);
$request->validate(['hook' => ['required', new SafeUrl(SafeFetch::policy()->allowHosts(['*.partner.example']))]]);
$request->validate(['hook' => ['required', SafeUrl::withoutLookup()]]); // no DNS lookup
$request->validate(['dev_hook' => ['required', 'safe_url:http']]); // http as well- Jedna správa bez ohľadu na dôvod — safe-fetch::validation.safe_url, „Pole :attribute musí byť URL adresa, ktorú táto aplikácia smie načítať.“ (aj v angličtine) — takže formulár používateľovi nikdy neprezradí, aké interné mená existujú. Správa, ktorú pravidlu zadáte sami, má prednosť.
- Textové pravidlo prijíma jediný parameter, http (safe_url:http → policy()->allowHttp()). Akýkoľvek iný parameter vyhodí InvalidArgumentException, namiesto toho, aby sa ticho ignoroval.
- new SafeUrl(?DestinationPolicy $policy = null, bool $lookup = true) prijíma vlastné pravidlá; ak potrebujete presný dôvod, zavolajte SafeFetch::vet().
- URL adresa sa pri načítaní posúdi znovu — DNS sa medzitým môže zmeniť.
Bez prekladu DNS
SafeUrl::withoutLookup(?DestinationPolicy $policy = null) posudzuje cez SafeFetch::precheck(): všetky pravidlá okrem prekladu — tvar, schému, port, blokovaných hostiteľov a hostiteľov aplikácie, zoznam povolených, localhost a adresu zapísanú priamo v plnom rozsahu. Formulár tak nečaká na DNS ani nezlyhá, kým sa meno ešte neprekladá. Použite ho, keď sa URL adresa uloží teraz a zavolá neskôr:
$request->validate(['endpoint' => ['required', 'string', SafeUrl::withoutLookup($policy)]]);
$stored = SafeFetch::precheck($request->input('endpoint'), $policy)->toString();precheck() vráti CanonicalUrl alebo vyhodí DestinationRejected a vyvolá DestinationRefused s via precheck. Meno, ktoré prejde, sa aj tak môže preložiť na privátnu adresu — ochrana ho pri každej požiadavke posúdi v plnom rozsahu. Ak sa URL adresa musí preložiť hneď, použite SafeFetch::vet().
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.