Vai al contenuto

HTTPQL e StreamQL ​

Ogma usa un sottoinsieme del linguaggio di query compatibile con Caido per filtrare la cronologia HTTP, il traffico WebSocket, gli esiti di Automazione e le viste correlate.

Sintassi ​

Le query sono composte da clausole unite da AND e OR.

text
req.host:example.com AND resp.code:200

Le parentesi raggruppano le espressioni:

text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400

Sono supportati i commenti:

text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500
text
/* focus on login */
req.path.cont:"login"

Operatori ​

OperatoreSignificato
:Uguaglianza o corrispondenza predefinita, a seconda del tipo di campo
.eq:Uguale a
.ne:Diverso da
.cont:Contiene, senza distinguere maiuscole e minuscole
.ncont:Non contiene, senza distinguere maiuscole e minuscole
.cs.cont:Contiene, distinguendo maiuscole e minuscole
.cs.ncont:Non contiene, distinguendo maiuscole e minuscole
.like:Corrispondenza con un pattern di tipo SQL
.nlike:Mancata corrispondenza con un pattern di tipo SQL
.regex:Corrispondenza con un’espressione regolare
.nregex:Mancata corrispondenza con un’espressione regolare
.lt:Minore di
.lte:Minore o uguale a
.gt:Maggiore di
.gte:Maggiore o uguale a
.existsL’intestazione esiste; usa req.header["Name"].value.exists o l’equivalente per la risposta

Esempi HTTP ​

Trova il traffico API:

text
req.path.cont:"/api/"

Trova gli errori del server:

text
resp.code.gte:500

Trova le risposte di grandi dimensioni:

text
resp.len.gt:100000

Trova le risposte JSON:

text
resp.header["content-type"].value.cont:"application/json"

Trova le richieste con cookie:

text
req.header["cookie"].value.exists

Trova il traffico modificato da Intercettazione o Trova e sostituisci:

text
req.modified.eq:true

Trova i possibili percorsi di amministrazione:

text
req.path.cont:"/admin" OR req.path.cont:"/manage"

Trova il traffico di Ripetizione o Automazione:

text
source:replay OR source:automate

Esempi di streaming ​

StreamQL applica lo stesso stile di query alle viste WebSocket e di streaming.

Trova i messaggi WebSocket che contengono un campo token:

text
ws.raw.cont:"token"

Trova i messaggi dal server al client:

text
ws.direction.eq:"To Client"

Trova i messaggi simili a JSON:

text
ws.raw.cont:"{" AND ws.raw.cont:"}"

Filtri salvati pratici ​

NomeQuery
Errori APIreq.path.cont:"/api/" AND resp.code.gte:400
Endpoint di autenticazionereq.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
Traffico JSONresp.header["content-type"].value.cont:"json"
Metodi interessantireq.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE
Potenziali segretiresp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"

Limiti ​

Per mantenere prevedibili i filtri, Ogma limita la complessità delle query:

  • Profondità massima di annidamento delle espressioni: 16.
  • Numero massimo di clausole: 64.

Se una query diventa troppo complessa, suddividila in filtri salvati o usa Ricerca per un’indagine più ampia.

Software proprietario. Tutti i diritti riservati.