---
title: "Pravidlá cieľov — Safe Fetch for Laravel | Roundly"
description: "DestinationPolicy — metódy, ktoré pre jedno volanie sprísnia alebo uvoľnia pravidlá, vzory hostiteľov, poradie pravidiel, privátni hostitelia."
url: https://roundly-consulting.com/sk/open-source/navody/safe-fetch-for-laravel/pravidla-cielov
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Safe Fetch for Laravel](https://roundly-consulting.com/sk/open-source/navody/safe-fetch-for-laravel.md)

# Pravidlá cieľov

DestinationPolicy určuje, čo ochrana pustí nad rámec tabuľky blokovaných sietí. SafeFetch::policy() sú predvolené nakonfigurované pravidlá; každá with-metóda vráti nové pravidlá, takže volanie ich môže lokálne sprísniť alebo uvoľniť:

```php
Http::safe(SafeFetch::policy()->allowHosts(['hooks.example.com'])->followRedirects())->post($url, $payload);
```

## Metódy

| Metóda | Predvolené | Čo robí |
| --- | --- | --- |
| `allowHttp() · httpsOnly()` | `['https']` | Aj http, alebo len https. |
| `ports(?array $ports)` | `null` | Jediné povolené porty; null pre ľubovoľný. |
| `allowHosts(array $hosts)` | `[]` | Nahradí striktný zoznam povolených hostiteľov (takže môže rozšíriť nakonfigurovaný) a prázdny zoznam odmietne (InvalidArgumentException). |
| `withoutHostAllowlist()` | — | Zruší zoznam povolených hostiteľov — výslovne. |
| `blockHosts(array $hosts)` | `[]` | Pridá blokované vzory hostiteľov. |
| `trustPrivateHosts(array $hosts) · withoutPrivateHosts()` | `[]` | Pridá mená, ktorých adresy smú byť privátne · vymaže ich. |
| `allowRanges(array $ranges) · withoutAllowedRanges()` | `[]` | Pridá adresy alebo CIDR vyňaté z tabuľky · vymaže ich. |
| `blockRanges(array $ranges)` | `[]` | Pridá rozsahy, ktoré sa vždy odmietnu a majú prednosť pred každým povolením. |
| `blockAppHosts(bool $block = true) · withoutAppHostBlock()` | `true` | Blokovanie hostiteľov aplikácie zapne alebo vypne bez ohľadu na konfiguráciu. |
| `appHosts(array $hosts)` | hostiteľ z app.url + app\_hosts.extra | Pridá mená, ktoré znamenajú aplikáciu. |
| `redirects(RedirectPolicy $redirects) · followRedirects(int $max = 3)` | vypnuté | Nastaví pravidlá presmerovaní · sleduje 307/308 najviac $max krokov. |
| `maxResponseBytes(?int $bytes)` | `null` | Len Http::safe(): oreže telo odpovede na tento počet bajtov (aspoň 1). |

Metódy, ktoré sprísňujú, sa voľne skladajú; čokoľvek, čo uvoľňuje, je volanie, ktoré to výslovne hovorí. Preto allowHosts() odmietne prázdny zoznam: zoznam, ktorý je náhodou prázdny ($tenant->hosts ?? \[\]), by inak povolil každého hostiteľa. Rozvetvite kód podľa neho, alebo zavolajte withoutHostAllowlist(), ak naozaj chcete zoznam zrušiť.

## Overenie hodnôt

Konštruktor overí všetko a vyhodí InvalidArgumentException: schémy len http a https, aspoň jedna; porty 1–65535, pri zozname aspoň jeden; položky hostiteľov sú kanonické mená alebo \*. a meno — žiadna samotná \*, schéma, port, cesta ani adresa (adresa patrí do rozsahov); rozsahy sú adresa alebo adresa/prefix; 0.0.0.0/0, ::/0 a každý IPv6 prefix, ktorý nesie celé IPv4 (::ffff:0:0/96, ::/96, 64:ff9b::/96, ::ffff:0:0:0/96, 2002::/16, alebo čokoľvek, čo ho obsahuje, napríklad 2000::/3), sa v povolených rozsahoch odmietnu; limit odpovede aspoň 1.

## Vzory hostiteľov

Presné mená alebo \*.example.com, porovnávané bez ohľadu na veľkosť písmen, s vynechaním jednej koncovej bodky na oboch stranách, medzinárodné mená ako punycode. \*.example.com zodpovedá akejkoľvek subdoméne — nikdy samotnému example.com ani badexample.com.

## Poradie pravidiel

Rozhoduje prvé zlyhanie:

- 1\. Kanonizácia URL adresy (pozrite URL adresy a blokované siete).
- 2\. Schéma, ktorú pravidlá nepovoľujú → scheme.
- 3\. Port, ktorý pravidlá nepovoľujú → port.
- 4\. Pravidlá mena: blokovaný hostiteľ → blocked (blocked\_host, pred prekladom); jeden z hostiteľov aplikácie — alebo priamo zapísaná adresa, ktorá je jednou z jej adries — pri zapnutom blokovaní → blocked (app\_host); striktný zoznam povolených, ktorý hostiteľa neobsahuje → not\_allowed (priamo zapísaná adresa v ňom nikdy nie je); localhost alebo \*.localhost, ktorý nie je privátnym hostiteľom → blocked (hostname).
- 5\. Meno sa preloží raz (priamo zapísaná adresa je sama sebou); nič → unresolved.
- 6\. Každá adresa: v blokovanom rozsahu → blocked (blocked\_range); v tabuľke a ani v povolenom rozsahu, ani meno nie je privátny hostiteľ → blocked (private\_address). Odpoveď, ktorá vôbec nie je adresa, sa odmietne bez ohľadu na to, čomu pravidlá dôverujú.

SafeFetch::precheck() spúšťa kroky 1–4 a krok 6 pre priamo zapísanú adresu, bez kroku 5.

## Blok má prednosť pred povolením

- Povolený hostiteľ sa aj tak preloží, posúdi a pripne — „smie sa naň pýtať“, nikdy „smie byť privátny“.
- Privátny hostiteľ (minio.internal) sa aj tak preloží a pripne; z tabuľky sú vyňaté len jeho adresy (aj localhost uvedený medzi nimi sa prekladá).
- Privátny hostiteľ nikdy nevyníma cloudovú metadátovú adresu — celý link-local (169.254.0.0/16 a fe80::/10: metadáta inštancie, prihlasovacie údaje úloh ECS na 169.254.170.2, EKS Pod Identity na 169.254.170.23, Tencent na 169.254.0.23), fd00:ec2::/32, 100.100.100.200, 192.0.0.192, 168.63.129.16, ani IPv4 adresu, ktorú nesie IPv6 adresa. Späť ju môže povoliť len povolený rozsah.
- Rozsahy zodpovedajú adrese aj IPv4 adrese, ktorú nesie (127.0.0.1/32 pokrýva ::ffff:127.0.0.1), a IPv6 rozsah vnútri prefixu, ktorý nesie IPv4, pokrýva aj obyčajné IPv4 adresy, ktoré nesie (::ffff:8.8.8.0/120 pokrýva 8.8.8.8). Blokovaný rozsah, ktorý taký prefix obsahuje celý (2002::/16, ::/0), blokuje len jeho IPv6 tvary, nikdy všetky IPv4 adresy.

## Pravidlá od nuly

Bežným začiatkom je SafeFetch::policy() s with-metódami — nesie vašu konfiguráciu. Oboje pravidlá sa však dajú zostaviť aj priamo; každý argument je pomenovaný a overený:

```php
new DestinationPolicy(
    array $schemes = ['https'], ?array $ports = null,
    array $allowedHosts = [], array $blockedHosts = [], array $privateHosts = [],
    array $allowedRanges = [], array $blockedRanges = [],
    bool $blockAppHosts = true, array $appHosts = [],
    RedirectPolicy $redirects = new RedirectPolicy, ?int $maxResponseBytes = null,
    array $appAddresses = [],
)

new RedirectPolicy(
    bool $enabled = false, int $max = 3, ?array $statuses = null,
    bool $allowDowngrade = false, array $forwardHeaders = [],
)
```

```php
use RoundlyConsulting\SafeFetch\DataTransferObjects\DestinationPolicy;
use RoundlyConsulting\SafeFetch\DataTransferObjects\RedirectPolicy;

$policy = new DestinationPolicy(
    ports: [443],
    allowedHosts: ['*.partner.example'],
    blockedRanges: ['203.0.113.0/24'],
    redirects: RedirectPolicy::methodPreserving(2),
    maxResponseBytes: 65_536,
);

$redirects = new RedirectPolicy(enabled: true, max: 5, statuses: [301, 302, 307, 308], forwardHeaders: ['X-Signature']);
```

Takto zostavené pravidlá o config/safe-fetch.php nič nevedia — ani o vlastných menách hostiteľov aplikácie: blockAppHosts je zapnuté, ale appHosts a appAddresses sú prázdne, kým ich neodovzdáte. Tabuľka blokovaných sietí platí bez ohľadu na pravidlá.

## 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 kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/safe-fetch-for-laravel.md)
