HTTPQL a StreamQL
Ogma používá podmnožinu dotazovacího jazyka kompatibilního s Caido pro filtrování historie HTTP, provozu WebSocket, výsledků funkce Automatizace a souvisejících pohledů.
Syntaxe
Dotazy se skládají z podmínek spojených pomocí AND a OR.
text
req.host:example.com AND resp.code:200Závorky seskupují výrazy:
text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400Podporovány jsou i komentáře:
text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500text
/* focus on login */
req.path.cont:"login"Operátory
| Operátor | Význam |
|---|---|
: | Rovnost nebo výchozí shoda podle typu pole |
.eq: | Je rovno |
.ne: | Není rovno |
.cont: | Obsahuje, bez rozlišování velikosti písmen |
.ncont: | Neobsahuje, bez rozlišování velikosti písmen |
.cs.cont: | Obsahuje, s rozlišováním velikosti písmen |
.cs.ncont: | Neobsahuje, s rozlišováním velikosti písmen |
.like: | Shoda se vzorem ve stylu SQL |
.nlike: | Neshoda se vzorem ve stylu SQL |
.regex: | Shoda s regulárním výrazem |
.nregex: | Neshoda s regulárním výrazem |
.lt: | Menší než |
.lte: | Menší nebo rovno |
.gt: | Větší než |
.gte: | Větší nebo rovno |
.exists | Hlavička existuje; použijte req.header["Name"].value.exists nebo ekvivalent pro odpověď |
Příklady HTTP
Vyhledejte provoz API:
text
req.path.cont:"/api/"Vyhledejte chyby serveru:
text
resp.code.gte:500Vyhledejte velké odpovědi:
text
resp.len.gt:100000Vyhledejte odpovědi JSON:
text
resp.header["content-type"].value.cont:"application/json"Vyhledejte požadavky s cookies:
text
req.header["cookie"].value.existsVyhledejte provoz upravený funkcí Zachytávání nebo Vyhledat a nahradit:
text
req.modified.eq:trueVyhledejte pravděpodobné cesty pro správu:
text
req.path.cont:"/admin" OR req.path.cont:"/manage"Vyhledejte provoz z funkce Opakované odesílání nebo Automatizace:
text
source:replay OR source:automatePříklady pro streamy
StreamQL používá stejný styl dotazů pro pohledy WebSocket a streamů.
Vyhledejte zprávy WebSocket obsahující pole s tokenem:
text
ws.raw.cont:"token"Vyhledejte zprávy ze serveru ke klientovi:
text
ws.direction.eq:"To Client"Vyhledejte zprávy připomínající JSON:
text
ws.raw.cont:"{" AND ws.raw.cont:"}"Praktické uložené filtry
| Název | Dotaz |
|---|---|
| Chyby API | req.path.cont:"/api/" AND resp.code.gte:400 |
| Autentizační koncové body | req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session" |
| Provoz JSON | resp.header["content-type"].value.cont:"json" |
| Zajímavé metody | req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE |
| Potenciální citlivé údaje | resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token" |
Limity
Aby filtry fungovaly předvídatelně, Ogma omezuje složitost dotazů:
- Maximální hloubka vnoření výrazů: 16.
- Maximální počet podmínek: 64.
Pokud je dotaz příliš složitý, rozdělte jej do uložených filtrů nebo použijte Hledání pro širší průzkum.