HTTPQL và StreamQL
Ogma dùng một tập con của ngôn ngữ truy vấn tương thích Caido để lọc lịch sử HTTP, lưu lượng WebSocket, kết quả Automate và các chế độ xem liên quan.
Cú pháp
Truy vấn gồm các mệnh đề được nối bằng AND và OR.
text
req.host:example.com AND resp.code:200Dấu ngoặc đơn nhóm các biểu thức:
text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400Có hỗ trợ chú thích:
text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500text
/* focus on login */
req.path.cont:"login"Toán tử
| Toán tử | Ý nghĩa |
|---|---|
: | Bằng hoặc đối chiếu theo mặc định, tùy kiểu trường |
.eq: | Bằng |
.ne: | Không bằng |
.cont: | Chứa, không phân biệt chữ hoa và chữ thường |
.ncont: | Không chứa, không phân biệt chữ hoa và chữ thường |
.cs.cont: | Chứa, phân biệt chữ hoa và chữ thường |
.cs.ncont: | Không chứa, phân biệt chữ hoa và chữ thường |
.like: | Khớp mẫu theo kiểu SQL |
.nlike: | Không khớp mẫu theo kiểu SQL |
.regex: | Khớp biểu thức chính quy |
.nregex: | Không khớp biểu thức chính quy |
.lt: | Nhỏ hơn |
.lte: | Nhỏ hơn hoặc bằng |
.gt: | Lớn hơn |
.gte: | Lớn hơn hoặc bằng |
.exists | Header tồn tại; dùng req.header["Name"].value.exists hoặc biểu thức tương đương cho phản hồi |
Ví dụ HTTP
Tìm lưu lượng API:
text
req.path.cont:"/api/"Tìm lỗi máy chủ:
text
resp.code.gte:500Tìm phản hồi lớn:
text
resp.len.gt:100000Tìm phản hồi JSON:
text
resp.header["content-type"].value.cont:"application/json"Tìm yêu cầu có cookie:
text
req.header["cookie"].value.existsTìm lưu lượng đã được sửa đổi bởi Chặn bắt hoặc Tìm và thay thế:
text
req.modified.eq:trueTìm đường dẫn có khả năng dành cho quản trị:
text
req.path.cont:"/admin" OR req.path.cont:"/manage"Tìm lưu lượng Replay hoặc Automate:
text
source:replay OR source:automateVí dụ truyền luồng
StreamQL áp dụng cùng kiểu truy vấn cho các chế độ xem WebSocket và truyền luồng.
Tìm thông điệp WebSocket chứa trường token:
text
ws.raw.cont:"token"Tìm thông điệp từ máy chủ đến máy khách:
text
ws.direction.eq:"To Client"Tìm thông điệp có dạng JSON:
text
ws.raw.cont:"{" AND ws.raw.cont:"}"Bộ lọc đã lưu hữu ích
| Tên | Truy vấn |
|---|---|
| Lỗi API | req.path.cont:"/api/" AND resp.code.gte:400 |
| Điểm cuối xác thực | req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session" |
| Lưu lượng JSON | resp.header["content-type"].value.cont:"json" |
| Phương thức đáng chú ý | req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE |
| Dữ liệu bí mật tiềm năng | resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token" |
Giới hạn
Để bộ lọc hoạt động có thể dự đoán được, Ogma giới hạn độ phức tạp của truy vấn:
- Độ sâu lồng biểu thức tối đa: 16.
- Số mệnh đề tối đa: 64.
Nếu truy vấn trở nên quá phức tạp, tách thành các bộ lọc đã lưu hoặc dùng Tìm kiếm để điều tra rộng hơn.