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.
إذا أصبح الاستعلام معقدًا أكثر من اللازم، فقسّمه إلى مرشحات محفوظة أو استخدم البحث لإجراء تحقيق أوسع.