ルール式では、比較演算子を使用してリクエスト値と照合し、論理演算子を使用して条件を組み合わせます。
比較演算子
比較演算子は、受信リクエストの値を式で指定された値と比較します。
contains
リクエスト値に指定された文字列が含まれているかどうかをチェックします。
演算子名:
Contains値のタイプ:
String例:
(http.host contains "example.com")
ends_with
リクエスト値が指定された文字列で終わるかどうかをチェックします。
演算子名:
Ends with値のタイプ:
String例:
(ends_with(http.host, "cn"))
eq
リクエスト値が指定された値と等しいかどうかをチェックします。
演算子名:
Equal to値のタイプ:
String例:
(http.host eq "www.example.com")
exists
リクエストに指定されたフィールドまたは属性が存在するかどうかをチェックします。
演算子名:
Exists値のタイプ:
String例:
(exists(http.request.headers["user-agent"]))
ge
リクエスト値が指定された数値以上であるかどうかをチェックします。
演算子名:
Greater than or equal to値のタイプ:
int例:
(ip.geoip.asnum ge 45104)
gt
リクエスト値が指定された数値より大きいかどうかをチェックします。
演算子名:
Greater than値のタイプ:
int例:
(ip.geoip.asnum gt 45104)
in
リクエスト値が指定されたセット内のいずれかの値と一致するかどうかをチェックします。リストを参照するには、$ シンボルを使用します。
演算子名:
Is in値のタイプ:
Array例:
(http.host in {"www.example.com" "blog.example.com"})( ip.src in $<LIST_NAME>)
le
リクエスト値が指定された数値以下であるかどうかをチェックします。
演算子名:
Less than or equal to値のタイプ:
int例:
(ip.geoip.asnum le 45104)
len eq
リクエスト値の長さが指定された数値と等しいかどうかをチェックします。
演算子名:
Length equals値のタイプ:
String例:
(len(http.request.cookies["session"]) eq 330688)
len gt
リクエスト値の長さが指定された数値より大きいかどうかをチェックします。
演算子名:
Length is greater than値のタイプ:
String例:
(len(http.request.cookies["session"]) gt 330688)
len lt
リクエスト値の長さが指定された数値より小さいかどうかをチェックします。
演算子名:
Length is less than値のタイプ:
String例:
(len(http.request.cookies["session"]) lt 330688)
lt
リクエスト値が指定された数値より小さいかどうかをチェックします。
演算子名:
Less than値のタイプ:
int例:
(ip.geoip.asnum lt 45104)
matches
リクエスト値が指定された正規表現 (PCRE 互換) と一致するかどうかをチェックします。
正規表現は、Premium および Enterprise プランでのみサポートされます。
演算子名:
Matches regex値のタイプ:
String例:
(http.host matches "(www|blog)\.example\.com")
ne
リクエスト値が指定された値と等しくないかどうかをチェックします。
演算子名:
Not equal to値のタイプ:
String例:
(http.host ne "www.example.com")
not ends_with
リクエスト値が指定された文字列で終わらないかどうかをチェックします。
演算子名:
Does not end with値のタイプ:
String例:
(not ends_with(http.host, "cn"))
not exists
リクエストに指定されたフィールドまたは属性が存在しないかどうかをチェックします。
演算子名:
Does not exist値のタイプ:
String例:
(not exists(http.request.headers["user-agent"]))
not starts_with
リクエスト値が指定された文字列で始まらないかどうかをチェックします。
演算子名:
Does not start with値のタイプ:
String例:
(not starts_with(http.host, "blog"))
not...contains
リクエスト値に指定された文字列が含まれていないかどうかをチェックします。
演算子名:
Does not contain値のタイプ:
String例:
(not http.host contains "example.com")
not...in
リクエスト値が指定されたセット内のどの値とも一致しないかどうかをチェックします。リストを参照するには、$ シンボルを使用します。
演算子名:
Is not in値のタイプ:
Array例:
(not http.host in {"www.example.com" "blog.example.com"})(not ip.src in $<LIST_NAME>)
not...matches
リクエスト値が指定された正規表現 (PCRE 互換) と一致しないかどうかをチェックします。
正規表現は、Premium および Enterprise プランでのみサポートされます。
演算子名:
Does not match regex値のタイプ:
String例:
(not http.host matches "(www|blog)\.example\.com")
percent
指定されたフィールドとパーセント値に基づいてリクエストをフィルタリングします。
演算子名:
Percentage値のタイプ:
Int値の範囲: 1~100
フィールド値が空の場合 (たとえば、リクエストに指定されたヘッダーが含まれていない場合)、ルールは有効にならず、一致結果は false になります。
サポートされているフィールド:
ヘッダー:
http.request.headers["example"]クライアント IP:
ip.srcURI クエリ文字列:
http.request.uri.args["example"]リクエストタイムスタンプ:
http.request.timestamp.sec
例:
percent(http.request.headers["example"],80)percent(ip.src,80)percent(http.request.cookies["example"],80)percent(http.request.args["example"],80)percent(http.request.timestamp.sec,80)
starts_with
リクエスト値が指定された文字列で始まるかどうかをチェックします。
演算子名:
Starts with値のタイプ:
String例:
(starts_with(http.host, "blog"))
その他の演算子
lower
大文字と小文字を区別しないマッチングのために、リクエスト値を小文字に変換します。
演算子名:
Case-insensitive値のタイプ:
String例:
(lower(http.request.uri))
論理演算子
論理演算子は、複数の式を組み合わせて複合式を作成します。
and
結合されたすべての式が true の場合にのみ true を返します。
演算子名:
Logical AND例:
((http.host eq "www.example.com") and (ip.geoip.country eq "CN"))
not
式の結果を否定し、true を false に、false を true に反転させます。
演算子名:
Logical NOT例:
not (http.host eq "www.example.com")
or
結合された式のいずれかが true の場合に true を返します。
演算子名:
Logical OR例:
((http.host eq "www.example.com") or (ip.geoip.country eq "CN"))
グループ化記号
かっこ ( と ) を使用して式の部分をグループ化し、評価順序を制御します。
グループ化記号は、式エディターと ESA API でサポートされていますが、式ビルダーではサポートされていません。
ネストされた式の例:
(http.host eq "www.example.com" and ((http.referer in {"download.example.com"}) or (http.referer in {"image.example.com"})))