APIを介して設定する
Rulesets APIを使用して公開された資格情報チェックを設定できます。以下のことができます:
- Cloudflareの公開された資格情報チェック管理ルールセットをデプロイする。
- 公開された資格情報をチェックするカスタムルールを作成する。
Rulesets APIを使用して公開された資格情報をチェックするルールを作成できます。これらのルールをカスタムルールセットに含める必要があり、カスタムルールセットはアカウントレベルで作成し、その後カスタムルールセットをフェーズにデプロイします。
公開された資格情報をチェックするルールは、ルール式と公開された資格情報チェックの結果の両方が真である場合に一致します。
カスタムルールで公開された資格情報をチェックするには、ルール定義にexposed_credential_checkオブジェクトを含めます。このオブジェクトには以下のプロパティが必要です:
username_expression— 資格情報チェックで使用されるユーザーIDを選択する式。このプロパティは最大1024文字までです。password_expression— 資格情報チェックで使用されるパスワードを選択する式。このプロパティは最大1024文字までです。
exposed_credential_checkオブジェクトは、次のいずれかのアクションでルールに使用できます:rewrite、log、block、challenge、またはjs_challenge。Cloudflareは、公開された資格情報チェックを次のアクションでのみ使用することを推奨しています:rewriteおよびlog。
カスタムルールセットを作成してデプロイするには、カスタムルールセットを操作するで説明されているワークフローに従ってください。
このPOSTリクエストの例は、公開された資格情報をチェックするルールを持つ新しいカスタムルールセットを作成します。ルールは、ルール式とexposed_credential_checkの結果の両方がtrueの場合に一致します。一致がある場合、ルールはCloudflareのログに公開された資格情報を持つリクエストを記録します。
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/rulesets" \--header "Authorization: Bearer <API_TOKEN>" \--header "Content-Type: application/json" \--data '{ "name": "Custom Ruleset A", "kind": "custom", "description": "このルールセットには公開された資格情報をチェックするルールが含まれています。", "rules": [ { "action": "log", "description": "login.phpページの公開された資格情報チェック", "expression": "http.request.method == \"POST\" && http.request.uri == \"/login.php\"", "exposed_credential_check": { "username_expression": "url_decode(http.request.body.form[\"username\"][0])", "password_expression": "url_decode(http.request.body.form[\"password\"][0])" } } ], "phase": "http_request_firewall_custom"}'レスポンスは作成されたルールセットを返します。ルール定義にexposed_credential_checkオブジェクトが存在することに注意してください。
{ "result": { "id": "<CUSTOM_RULESET_ID>", "name": "Custom Ruleset A", "description": "このルールセットには公開された資格情報をチェックするルールが含まれています。", "kind": "custom", "version": "1", "rules": [ { "id": "<CUSTOM_RULE_ID>", "version": "1", "action": "log", "description": "login.phpページの公開された資格情報チェック", "expression": "http.request.method == \"POST\" && http.request.uri == \"/login.php\"", "exposed_credential_check": { "username_expression": "url_decode(http.request.body.form[\"username\"][0])", "password_expression": "url_decode(http.request.body.form[\"password\"][0])" }, "last_updated": "2021-03-19T10:48:04.057775Z", "ref": "<CUSTOM_RULE_REF>", "enabled": true } ], "last_updated": "2021-03-19T10:48:04.057775Z", "phase": "http_request_firewall_custom" }, "success": true, "errors": [], "messages": []}この例では、リクエストボディ内のフィールド(http.request.body.formで利用可能)は、コンテンツタイプがapplication/x-www-form-urlencodedのときにURLエンコードされるため、url_decode()関数を使用しています。
カスタムルールセットを作成した後は、それをフェーズにデプロイして実行させます。詳細については、カスタムルールセットをデプロイするを参照してください。
このPOSTリクエストの例は、JSONレスポンス内の公開された資格情報をチェックするルールを持つ新しいカスタムルールセットを作成します。ルールは、ルール式とexposed_credential_checkの結果の両方がtrueの場合に一致します。一致がある場合、ルールはリクエストにExposed-Credential-Check HTTPヘッダーを値1で追加します。
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/rulesets" \--header "Authorization: Bearer <API_TOKEN>" \--header "Content-Type: application/json" \--data '{ "name": "Custom Ruleset B", "kind": "custom", "description": "このルールセットには公開された資格情報をチェックするルールが含まれています。", "rules": [ { "action": "rewrite", "action_parameters": { "headers": { "Exposed-Credential-Check": { "operation": "set", "value": "1" } } }, "description": "JSONボディを持つログインエンドポイントの公開された資格情報チェック", "expression": "http.request.method == \"POST\" && http.request.uri == \"/login.php\" && any(http.request.headers[\"content-type\"][*] == \"application/json\")", "exposed_credential_check": { "username_expression": "lookup_json_string(http.request.body.raw, \"username\")", "password_expression": "lookup_json_string(http.request.body.raw, \"password\")" } } ], "phase": "http_request_firewall_custom"}'レスポンスは作成されたルールセットを返します。ルール定義に以下の要素が存在することに注意してください:
rewriteアクション。- 公開された資格情報を持つリクエストに追加されるHTTPヘッダーを構成する
action_parametersオブジェクト。 exposed_credential_checkオブジェクト。
{ "result": { "id": "<CUSTOM_RULESET_ID>", "name": "Custom Ruleset B", "description": "このルールセットには公開された資格情報をチェックするルールが含まれています。", "kind": "custom", "version": "1", "rules": [ { "id": "<CUSTOM_RULE_ID>", "version": "1", "action": "rewrite", "action_parameters": { "headers": { "Exposed-Credential-Check": { "operation": "set", "value": "1" } } }, "description": "JSONボディを持つログインエンドポイントの公開された資格情報チェック", "expression": "http.request.method == \"POST\" && http.request.uri == \"/login.php\" && any(http.request.headers[\"content-type\"][*] == \"application/json\")", "exposed_credential_check": { "username_expression": "lookup_json_string(http.request.body.raw, \"username\")", "password_expression": "lookup_json_string(http.request.body.raw, \"password\")" }, "last_updated": "2022-03-19T12:48:04.057775Z", "ref": "<CUSTOM_RULE_REF>", "enabled": true } ], "last_updated": "2022-03-19T12:48:04.057775Z", "phase": "http_request_firewall_custom" }, "success": true, "errors": [], "messages": []}カスタムルールセットを作成した後は、それをアカウントレベルでhttp_request_firewall_customフェーズにデプロイして実行させます。カスタムルールセットをデプロイするには、ルールセットIDが必要です。詳細については、カスタムルールセットをデプロイするを参照してください。