tool_name_glob) i które argumenty (klauzule
args_match nad polami JSONPath). Ta strona to
precyzyjna gramatyka obu — co wzorzec dopasowuje, czego nie i jak każdy operator
koercjonuje typy — aby reguła, którą autorujesz w konsoli, zachowywała się
dokładnie tak, jak ją tu czytasz.
Sztandarowy przypadek użycia: zamień tępe „zablokuj shell.exec” w chirurgiczne
„zablokuj shell.exec tylko gdy polecenie wygląda jak rm -rf”. Glob wybiera
rodzinę narzędzi; operatory argumentów wybierają niebezpieczne wywołanie w niej.
To referencja składni. Po to, gdzie te klauzule żyją na regule, kolejność reguł i
werdykty, zobacz głęboką referencję Reguły Firewall.
Po same pola reguły zobacz przegląd Firewall.
1. Gdzie ta składnia ma zastosowanie
Obie formy są autorowane na regule firewalla, w konsoli pod/console/firewall (zapisy wymagają Developer+). Nigdy nie wywołujesz
matchera bezpośrednio — brama ewaluuje go na każdym wywołaniu narzędzia wobec
rozwiązanej polityki. Reguła pasuje,
gdy jej powierzchnia, tool_name_glob, opcjonalny glob skilla oraz klauzule
args_match wszystkie pasują; wygrywa pierwsze dopasowanie.
2. Gramatyka glob nazwy narzędzia
tool_name_glob to celowo mała, przewidywalna gramatyka — nie pełny regex.
Wzorce są dopasowywane z uwzględnieniem wielkości liter (nazwy narzędzi MCP są
konwencjonalnie pisane małymi literami z kropkami, więc składanie wielkości liter
zaskoczyłoby cię, gdy kopiujesz nazwę z zakładki Discovered tools).
* (lub puste) — dopasuj każde narzędzie
* (lub puste) — dopasuj każde narzędzie
Pusty wzorzec lub goły
* dopasowuje wszystkie narzędzia. Użyj go na regule
łapiącej wszystko lub polegaj zamiast tego na default_verdict polityki.foo.* — dopasowanie przedrostka
foo.* — dopasowanie przedrostka
shell.* dopasowuje shell.exec, shell.read, shell.write. Nie
dopasowuje gołego shell (kropka jest wymagana — glob przedrostka pokrywa
tylko dzieci w przestrzeni nazw).*.exec — dopasowanie przyrostka
*.exec — dopasowanie przyrostka
*.exec dopasowuje narzędzie w przestrzeni nazw shell.exec oraz gołe,
nieumieszczone w przestrzeni nazw exec (natywne dla dostawcy wywołania
funkcji i serwery MCP bez przestrzeni nazw wystawiają narzędzia pod gołym
czasownikiem, więc reguła przyrostka pokrywa oba kształty). Przyrostek pozostaje
zakotwiczony na kropce lub początku łańcucha, więc *.exec nie dopasowuje
shell.execute.*.X.* — dopasowanie środka (infiks)
*.X.* — dopasowanie środka (infiks)
*.shell.* dopasowuje dowolny kształt <server>.shell.<verb> —
local.shell.exec, byo.shell.run. Wymaga co najmniej jednego znaku po
każdej stronie infiksu, więc *.shell.* nie dopasowuje gołego shell
ani samego .shell.. Tylko symetryczny kształt *.X.* jest traktowany jako
infiks; mieszany wzorzec jak foo.*.bar przechodzi do dopasowania
dokładnego.cokolwiek innego — dopasowanie dokładne
cokolwiek innego — dopasowanie dokładne
Każdy wzorzec, który nie jest jednym z czterech kształtów wieloznacznych
powyżej (w tym dosłowna nazwa narzędzia lub zniekształcona kombinacja jak
foo.*.bar), jest porównywany jako dokładny łańcuch z uwzględnieniem wielkości
liter.3. Klauzule argumentów JSONPath
args_match to zestaw klauzul, każda trójka {path, op, value}. path to
JSONPath do obiektu argumentów wywołania narzędzia; op to jeden z siedmiu
operatorów; value to to, z czym porównać. Wszystkie klauzule w regule są
połączone AND — każda klauzula musi pasować, by reguła odpaliła.
Wspierany podzbiór JSONPath
| Kształt | Dopasowuje |
|---|---|
$.foo | Klucz najwyższego poziomu. |
$.foo.bar | Zagnieżdżony klucz. |
$.foo[0] | Element tablicy po indeksie. |
$.arr[1].k | Indeks, potem klucz (kombinacje powyższych). |
$.*), filtrów
($.foo[?(...)]), wycinków ($.foo[0:2]) ani rekurencyjnego zstępowania
($..foo).
Fail-closed na ścieżce. Jeśli ścieżka klauzuli rozwiązuje się do niczego —
klucz brakuje, argumenty nie są poprawnym JSON-em lub wartość jest złego typu dla
operatora — ta klauzula ewaluuje się do false, reguła nie odpala, a
ewaluacja przechodzi do następnej reguły lub domyślnej polityki. Zniekształcony
argument nigdy nie auto-odmawia i nigdy nie wysypuje silnika.
4. Operatory argumentów
Siedem operatorów, zamknięty zestaw. Walidator konsoli i żywy silnik dzielą dokładnie to samo słownictwo, więc klauzula, która się zapisuje, to klauzula, która działa.| Operator | Porównuje | Reguły typów |
|---|---|---|
eq | Dokładna równość. | Typowane: string↔string, bool↔bool lub number↔number. Mieszane typy nigdy nie pasują. |
contains | Zawieranie podłańcucha. | Obie strony muszą być stringami; cokolwiek innego to niedopasowanie. Pusta wartość dopasowuje dowolny string. |
regex | Wzorzec RE2 (czas liniowy, brak backreferencji) wobec stringa. | Wartość i rozwiązany arg muszą oba być stringami. Niepoprawny wzorzec wyłącza klauzulę (nigdy nie dopasowuje). |
in | Przynależność — wartość równa się dowolnemu elementowi listy. | Wartość musi być tablicą JSON; każdy element porównuje się z semantyką eq. |
cidr_match | Rozwiązana wartość to IP wewnątrz danej sieci. | Wartość to string CIDR (IPv4 lub IPv6, np. 10.0.0.0/8, fd00::/8); arg musi parsować się jako IP. |
gt | Większe-niż, numerycznie. | Obie strony muszą koercjonować się do liczby. Wyglądający numerycznie string nie jest koercjonowany — to niedopasowanie typu. |
lt | Mniejsze-niż, numerycznie. | Ta sama reguła tylko-numeryczna co gt. |
5. Przepracowany przykład
Zablokuj destrukcyjny eksport bazy danych, ale tylko gdy celuje w produkcyjne połączenie nad hostem sieci prywatnej:db.* zakresuje regułę do rodziny narzędzi bazy
danych; trzy klauzule łączą się AND, więc werdykt (powiedzmy deny) odpala
tylko gdy instrukcja jest destrukcyjna oraz połączenie jest jednym z dwóch
nazwanych celów prod oraz jego host wpada w prywatny zakres 10.0.0.0/8.
db.query wobec połączenia dev na publicznym IP przemyka obok tej reguły
nietknięte.
6. Reguły egress (host / CIDR)
Operatorcidr_match powyżej dopasowuje IP, które narzędzie zgłasza w swoich
argumentach. To różni się od reguły na powierzchni egress, która ewaluuje
wychodzący cel, do którego narzędzie faktycznie sięga, listą dozwolonych lub
zakazanych hostów/CIDR — podstawowa obrona przed SSRF i
eksfiltracją danych. Reguły egress
używają tej samej notacji CIDR, ale żyją na powierzchni egress; zobacz
Reguły Firewall po format listy egress.
Żaden preset nie dostarcza reguł egress CIDR za ciebie — poziom autonomii
tight
odmawia powszechnym nazwom narzędzi w kształcie fetch (http_fetch,
fetch_url, web_search, request), nie zakresom sieci. Zautoruj własną regułę
odmowy hosta/CIDR, gdy potrzebujesz przypiąć egress do konkretnych celów.7. Szybka referencja
Kształty glob
* wszystkie · foo.* przedrostek · *.exec przyrostek (+ goły czasownik) ·
*.X.* infiks · cokolwiek innego dokładne. Z uwzględnieniem wielkości liter.JSONPath
$.foo · $.foo.bar · $.foo[0] · $.arr[1].k. Bez wieloznaczników,
filtrów, wycinków ani rekurencyjnego zstępowania.Operatory stringów
eq (typowany) · contains (podłańcuch) · regex (RE2) ·
in (przynależność do listy).Operatory numeryczne i sieciowe
gt / lt (tylko numeryczne, bez koercji stringa) · cidr_match
(IPv4/IPv6 w zakresie).Powiązane
Reguły Firewall
Pełny model reguł — powierzchnie, kolejność, sanityzatory, sekwencje i listy
egress.
Niebezpieczne wywołania narzędzi
Zagrożenie, przed którym te klauzule bronią, i jak zakresować do niego regułę.
Słownik werdyktów
Co robią
allow, audit, deny, sanitize i reszta, gdy reguła dopasuje.Dlaczego to zostało zablokowane?
Prześledź konkretną blokadę z powrotem do reguły i klauzuli, które odpaliły.
