Azure WAFの除外リストの設定はなかなか理解が難しいです。一番理解しにくいのは[引数名]と[引数値]の関連部分です。以下の例を用いて、説明しておきます。皆さんの理解に役立てればうれしいです。
結論1:引数値に検知文字が入っている場合、「引数名」と「引数値」で除外ができます。
注意としては、RequestArgValuesはRequestArgNameと同じく、引数名をセレクターで設定します。本当の引数値を指定することはできません。効果としては、該当引数名ならどんな引数値でも除外されます。除外範囲は広いのでリスクは高いです。
結論2:引数名自体に検知文字が入っている場合、「引数キー」を指定して除外ができます。「引数名」と「引数値」で指定しても除外できません。つまり「引数名」
結論1について以下の例を用いて説明します:
公開文章を読むと、以下の情報があります。
①RequestArgValues 等しい test Uri: http://localhost:8080/?test=/etc/passwd /etc/passwd
②RequestArgNames 等しい test Uri: http://localhost:8080/?test=/etc/passwd /etc/passwd

つまり、引数値に検知文字が入っています。
引数名:test
引数値:/etc/passwd
この場合の除外方法は:RequestArgValues、セレクター:test の設定方法、
または:RequestArgName、セレクター:test の設定方法
で除外できます。
つまり、ここでのRequestArgValuesは実には引数名を指しています。本当意味の引数値を指していません。
この除外設定では、引数値の部分は/etc/passwdだろうか、/sql=selectだろうか、どんな検知文字入っても、testの引数名なら全部除外されてしまいます。本当の引数値の/etc/psswdを特定できません。除外範囲は広いのでリスクは高いです。
結論2について、以下の検証例を用いて説明します。
例:引数名自体は[/etc/passwd]なので引っ掛かります。この場合は、除外はRequestArgKeys「要求の引数キー」を使うべきです。
================================
http://xxxx.xxxx.com/?/etc/passwd=test
引数名:/etc/passwd (引数名自体は検知文字列が入っています。)
引数値:test
上記のrequestに対して、「要求の引数キー」、「要求の引数名」、「要求の引数値」を用いて除外設定を検証します。
================================
まず、Uri: http://localhost:8080/?/etc/passwd=test が検知されたことを確認します。

次、除外設定で引数キー、セレクター「/etc/passwd」を設定します。結果は除外されますね。



