ข้ามไปยังเนื้อหา

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:500
text
/* 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:"}"

ตัวกรองที่บันทึกไว้และใช้งานได้จริง ​

ชื่อคำค้น
ข้อผิดพลาด APIreq.path.cont:"/api/" AND resp.code.gte:400
จุดปลายทางการยืนยันตัวตนreq.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
ทราฟฟิก JSONresp.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

หากคำค้นซับซ้อนเกินไป ให้แยกเป็นตัวกรองที่บันทึกไว้ หรือใช้ ค้นหา เพื่อสืบค้นในขอบเขตที่กว้างขึ้น

ซอฟต์แวร์กรรมสิทธิ์ สงวนลิขสิทธิ์