Zum Inhalt springen

HTTPQL und StreamQL ​

Ogma verwendet eine Teilmenge einer Caido-kompatiblen Abfragesprache zum Filtern des HTTP-Verlaufs, des WebSocket-Verkehrs, der Automate-Ergebnisse und verwandter Ansichten.

Syntax ​

Abfragen bestehen aus Klauseln, die mit AND und OR verbunden werden.

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

Klammern gruppieren Ausdrücke:

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

Kommentare werden unterstützt:

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

Operatoren ​

OperatorBedeutung
:Gleichheit oder Standardabgleich, abhängig vom Feldtyp
.eq:Ist gleich
.ne:Ist ungleich
.cont:Enthält, ohne Beachtung der Groß-/Kleinschreibung
.ncont:Enthält nicht, ohne Beachtung der Groß-/Kleinschreibung
.cs.cont:Enthält, unter Beachtung der Groß-/Kleinschreibung
.cs.ncont:Enthält nicht, unter Beachtung der Groß-/Kleinschreibung
.like:Musterabgleich nach SQL-Art
.nlike:Negativer Musterabgleich nach SQL-Art
.regex:Abgleich mit einem regulären Ausdruck
.nregex:Negativer Abgleich mit einem regulären Ausdruck
.lt:Kleiner als
.lte:Kleiner oder gleich
.gt:Größer als
.gte:Größer oder gleich
.existsHeader vorhanden; verwenden Sie req.header["Name"].value.exists oder die entsprechende Variante für Antworten

HTTP-Beispiele ​

API-Verkehr finden:

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

Serverfehler finden:

text
resp.code.gte:500

Große Antworten finden:

text
resp.len.gt:100000

JSON-Antworten finden:

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

Anfragen mit Cookies finden:

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

Durch Abfangen (Intercept) oder Suchen & Ersetzen (Match & Replace) veränderten Verkehr finden:

text
req.modified.eq:true

Vermutliche Administrationspfade finden:

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

Replay- oder Automate-Verkehr finden:

text
source:replay OR source:automate

Stream-Beispiele ​

StreamQL wendet denselben Abfragestil auf WebSocket- und Stream-Ansichten an.

WebSocket-Nachrichten mit einem Token-Feld finden:

text
ws.raw.cont:"token"

Nachrichten vom Server an den Client finden:

text
ws.direction.eq:"To Client"

JSON-ähnliche Nachrichten finden:

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

Praktische gespeicherte Filter ​

NameAbfrage
API-Fehlerreq.path.cont:"/api/" AND resp.code.gte:400
Authentifizierungsendpunktereq.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
JSON-Verkehrresp.header["content-type"].value.cont:"json"
Interessante Methodenreq.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE
Mögliche Geheimnisseresp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"

Grenzen ​

Damit Filter vorhersehbar bleiben, begrenzt Ogma die Komplexität von Abfragen:

  • Maximale Verschachtelungstiefe von Ausdrücken: 16.
  • Maximale Anzahl von Klauseln: 64.

Wenn eine Abfrage zu komplex wird, teilen Sie sie in gespeicherte Filter auf oder verwenden Sie die Suche für eine breitere Untersuchung.

Proprietäre Software. Alle Rechte vorbehalten.