本文へ移動

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 の LIKE に似たパターン照合
.nlike:SQL の LIKE に似たパターンに一致しない
.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"

Cookie を含むリクエストを検索:

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。

クエリが複雑になりすぎた場合は、保存済みフィルターに分割するか、検索を使ってより広範囲に調査してください。

プロプライエタリソフトウェア。すべての権利を保有します。