【目次】

  1. 1. はじめに
  2. 2. アップデート内容
  3. 3. 解析前テキスト変換について
  4. 4. 解析前テキスト変換の設定方法
  5. 5. WafCharmでの対応
  6. 6. おわりに

1. はじめに

2026年7月に、AWS WAF が解析前テキスト変換と新しいテキスト変換を追加というニュースが発表されました。

本ブログ記事では、アップデートの内容と、解析前テキスト変換について見ていきたいと思います。

2. アップデート内容

AWS WAF が解析前テキスト変換と新しいテキスト変換を追加というニュースには、以下の2つのアップデート内容が含まれています。

  • 解析前テキスト変換
  • 新しいテキスト変換

順番は前後しますが、「新しいテキスト変換」は、元々ルール設定として存在していたテキスト変換の選択肢に、新しい項目が10個追加された、というものです。

Command line Unix、Command line Windows、JS decode extendedといったような選択肢が増えています。
それぞれの詳細は、AWS公式ドキュメントに記載されているテキスト変換についての情報をご確認ください。

「解析前テキスト変換」は、これまでのテキスト変換とは利用箇所や、その仕組みが少し異なります。

3. 解析前テキスト変換について

従来のテキスト変換は、AWS WAFにてパース済みの対象に対して変換を行う仕組みとなっています。

例えば、 ?user=guest%3Brole=admin という値は 「 user というキーに対して guest%3Brole=admin という値を持っている」という形でパースされます。
テキスト変換はパース後に発生しますので、仮にURLデコードを実施することになっていた場合、 user というキーに対する値は、guest;role=admin となります。

解析前テキスト変換は、キーと値をパースする前にテキスト変換を実施するというものです。例えば、解析前テキスト変換にURLデコードとReplace semicolons with ampersands(セミコロンを & に置き換える)の2つを設定していた場合は、 ?user=guest%3Brole=admin のうち %3B; に変換され、 & に置き換えられた結果 ?user=guest&role=admin となります。

その後パースするため、「 user というキーに対して guest という値、role というキーに対して admin という値を持っている」という状態で検査が可能になります。

4. 解析前テキスト変換の設定方法

解析前テキスト変換は SingleQueryArgument と AllQueryArguments のみが対象です。

Inspectの箇所にて SingleQueryArgument と AllQueryArguments のいずれかを選択すると、以下のスクリーンショットのように「Pre-parse text transformations」という選択肢が表示されます。

ここで「Add pre-parse text transformation」ボタンをクリックすると、テキスト変換と同じように変換方法を指定できます。

変換方法の選択肢にはNoneというものもありますが、こちらは解析前テキスト変換を設定しなかった場合と同じ動作をするようです。

上記の ?user=guest%3Brole=admin の例をもとに、 user の値が guest かつ role の値が admin の場合にブロックするルールを作成しました。

{
    "Name": "ルール名",
    "Priority": 3,
    "Statement": {
        "AndStatement": {
            "Statements": [
                {
                    "ByteMatchStatement": {
                        "SearchString": "guest",
                        "FieldToMatch": {
                            "SingleQueryArgument": {
                                "Name": "user"
                            }
                        },
                        "TextTransformations": [
                            {
                                "Priority": 0,
                                "Type": "NONE"
                            }
                        ],
                        "PositionalConstraint": "CONTAINS",
                        "PreParseTextTransformations": [
                            {
                                "Priority": 0,
                                "Type": "URL_DECODE"
                            },
                            {
                                "Priority": 1,
                                "Type": "REPLACE_SEMICOLONS_WITH_AMPERSANDS"
                            }
                        ]
                    }
                },
                {
                    "ByteMatchStatement": {
                        "SearchString": "admin",
                        "FieldToMatch": {
                            "SingleQueryArgument": {
                                "Name": "role"
                            }
                        },
                        "TextTransformations": [
                            {
                                "Priority": 0,
                                "Type": "NONE"
                            }
                        ],
                        "PositionalConstraint": "CONTAINS",
                        "PreParseTextTransformations": [
                            {
                                "Priority": 0,
                                "Type": "URL_DECODE"
                            },
                            {
                                "Priority": 1,
                                "Type": "REPLACE_SEMICOLONS_WITH_AMPERSANDS"
                            }
                        ]
                    }
                }
            ]
        }
    },
    "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "ルール名"
    },
    "Action": {
        "Block": {}
    }
}

解析前テキスト変換にURLデコードとReplace semicolons with ampersands(セミコロンを & に置き換える)の2つを設定していることで、パース前に変換が行われ、想定どおり ?user=guest%3Brole=admin という値をブロックできるようになります。

5. WafCharmでの対応

2026年8月17日現在、WafCharmの方ではこちらのアップデートに追随できておらず、対応中となります。
そのため、お客様の方で解析前テキスト変換を用いたルールを作成した場合、WafCharm側の自動更新処理等によって設定値が削除されてしまう可能性がございます。
ご不便をおかけし申し訳ありませんが、対応が完了次第ご案内致しますので今しばらくお待ちください。

6. おわりに

今回は、解析前テキスト変換について見てみました。

これまではクエリーストリングの値によっては思ったようにパースされず検知が難しいケースもありましたが、このアップデートにより対応が可能になりました。

後段のサーバーなどでどういった処理をしているかによっても適した対応は異なりますが、今回の例のようにセミコロンで値を区切っている場合に、AWS WAFでの検査を実施したいといった場合には有用な場合があります。