Bezpečnostný model
Balík stojí medzi nedôveryhodným query stringom a vašou databázou, preto sú nebezpečné časti odstránené už návrhom, nie ponechané na každý endpoint:
- Predvolene cez allow-list — nič sa nedá filtrovať ani triediť bez deklarácie; všetko ostatné je HTTP 400 (alebo sa v režime ignore zahodí). Preklep v konfigurácii režimu vyhodí InvalidConfigurationException namiesto hádania.
- Operátory nikdy z holého vstupu — operator() určí porovnanie v kóde; operators() rešpektuje len deklarované tokeny a čokoľvek iné berie ako doslovnú hodnotu.
- Viazané hodnoty, identifikátory od vývojára — vstavané filtre viažu každú hodnotu ako parameter; identifikátory stĺpcov pochádzajú z vašich deklarácií a obaľuje ich gramatika dopytu, nikdy nie z requestu.
- Zástupné znaky nerozšíria vyhľadávanie — %, _ a \ vo vstupe sa escapujú a porovnávajú s explicitnou klauzulou ESCAPE na každom driveri.
- Ohraničená práca — limits.max_filter_values, limits.max_value_length a limits.max_sorts obmedzujú, čo si jedna URL môže vypýtať; duplicitné stĺpce triedenia sa odstránia.
- Žiadne podstrčenie argumentov do scopov — scope dostane presne jeden argument z requestu, pokiaľ nezapnete spread: true.
- Obmedzený odraz — chybové hlášky zopakujú najviac 5 neznámych kľúčov, každý skrátený na 64 znakov.
- Typované stĺpce v bezpečí — FilterValueShape drží chybné uuid a id mimo PostgreSQL, takže zlá hodnota znamená prázdny výsledok, nie chybu 500.
- Validovaná veľkosť stránky — per_page nad maximom vráti 422 a perPage() ju ešte raz pevne obmedzí.
- Verejné názvy, súkromné stĺpce — interné názvy držia vašu schému mimo URL.
Správne negácie
Negácie znamenajú to, čo myslí človek filtrujúci zoznam: not a ncontains zahŕňajú riadky NULL, viachodnotová negácia znamená „žiadne z týchto“ (AND, nie OR) a negácie relácií používajú whereDoesntHave, takže riadok naviazaný na vylúčenú hodnotu vypadne, aj keď má iné väzby.
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.