HTTPQL ו-StreamQL
Ogma משתמש בתת-קבוצה של שפת שאילתות תואמת Caido לסינון היסטוריית HTTP, תעבורת WebSocket, תוצאות אוטומציה ותצוגות קשורות.
תחביר
שאילתות מורכבות מתנאים המחוברים באמצעות AND ו-OR.
text
req.host:example.com AND resp.code:200סוגריים מקבצים ביטויים:
text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400ניתן להוסיף הערות:
text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500text
/* focus on login */
req.path.cont:"login"אופרטורים
| אופרטור | משמעות |
|---|---|
: | שוויון או התאמת ברירת מחדל, בהתאם לסוג השדה |
.eq: | שווה |
.ne: | לא שווה |
.cont: | מכיל, ללא הבחנה בין אותיות גדולות וקטנות |
.ncont: | לא מכיל, ללא הבחנה בין אותיות גדולות וקטנות |
.cs.cont: | מכיל, עם הבחנה בין אותיות גדולות וקטנות |
.cs.ncont: | לא מכיל, עם הבחנה בין אותיות גדולות וקטנות |
.like: | התאמת תבנית בסגנון SQL |
.nlike: | אי-התאמה לתבנית בסגנון SQL |
.regex: | התאמה לביטוי רגולרי |
.nregex: | אי-התאמה לביטוי רגולרי |
.lt: | קטן מ- |
.lte: | קטן או שווה |
.gt: | גדול מ- |
.gte: | גדול או שווה |
.exists | הכותרת קיימת; השתמשו ב-req.header["Name"].value.exists או במקבילה עבור התגובה |
דוגמאות HTTP
איתור תעבורת API:
text
req.path.cont:"/api/"איתור שגיאות שרת:
text
resp.code.gte:500איתור תגובות גדולות:
text
resp.len.gt:100000איתור תגובות JSON:
text
resp.header["content-type"].value.cont:"application/json"איתור בקשות עם עוגיות:
text
req.header["cookie"].value.existsאיתור תעבורה ששונתה באמצעות יירוט או התאמה והחלפה:
text
req.modified.eq:trueאיתור נתיבים שסביר שהם נתיבי ניהול:
text
req.path.cont:"/admin" OR req.path.cont:"/manage"איתור תעבורת שליחה חוזרת או אוטומציה:
text
source:replay OR source:automateדוגמאות זרמים
StreamQL מחיל את אותו סגנון שאילתות על תצוגות WebSocket וזרמים.
איתור הודעות WebSocket המכילות שדה אסימון:
text
ws.raw.cont:"token"איתור הודעות מהשרת ללקוח:
text
ws.direction.eq:"To Client"איתור הודעות דמויות JSON:
text
ws.raw.cont:"{" AND ws.raw.cont:"}"מסננים שמורים שימושיים
| שם | שאילתה |
|---|---|
| שגיאות API | req.path.cont:"/api/" AND resp.code.gte:400 |
| נקודות קצה לאימות | req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session" |
| תעבורת JSON | resp.header["content-type"].value.cont:"json" |
| שיטות בקשה מעניינות | req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE |
| סודות אפשריים | resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token" |
מגבלות
כדי לשמור על התנהגות צפויה של המסננים, Ogma מגביל את מורכבות השאילתות:
- עומק מרבי של ביטויים מקוננים: 16.
- מספר תנאים מרבי: 64.
אם שאילתה נעשית מורכבת מדי, פצלו אותה למסננים שמורים או השתמשו בחיפוש לצורך חקירה רחבה יותר.