実現したいこと
PCREの正規表現で想定していないクエリを含んだURLへのアクセスをAWS WAFにて拒否しようとしています。
例えば、パラメータを複数つけられた以下のようなidが複数存在するケースを除外し、1つだけのパラメータがつけられたものにマッチさせたいと考えています。
- マッチさせたい文字列(id=が1つだけ)
https://www.example.co.jp?id=3
- マッチさせたくない文字列(id=が2つ以上)
https://www.example.co.jp?id=3&id=3&id=3
条件
AWS WAFの制約により、後方参照と部分式取得はサポートされていない環境です。
質問
/(id=*){1}/
のような形で正規表現を書いた場合、複数であったとしてもマッチしてしまいました。
「特定の文字列が1つのみの場合マッチさせる」という正規表現は、どのようにすれば満たせるのでしょうか?
正規表現に初めて触れているため、拙い質問で恐縮ですがよろしくお願いします。
https://www.example.co.jp?id=3&id=3&id=3
とか十分ありえるので、存在しないURLというのは無理があると思います
ご返信ありがとうございます。
存在しないURLという文言は不適切でした。
あくまでこちらが「想定していないクエリを含むURLに対して」という意味に修正致しました。
ちなみに言語はperlなのでしょうか?phpとかでもいいですか?
想定は「スラッシュ間にid=n」は1つだけ・・・という条件でいいですか?
/aid=1/bid=2/的なことは起こり得ないのでしょうか?
AWS WAFのパターンセットによる制御をしようとしています。
内部的にはperlと同様の記法になります。
あ、パラメータでも不正をチェックするのですね
一般に?id=1&id=2&id=3の場合、最後のid=3が採用されます
チェックボックスなどでよく使われるので、URLをフィルタするのはあまり
好ましくありません
前提の情報不足申し訳ありません。例としてidを出しましたが、実際はidではなく入力されるフォームも存在しません。
意図した攻撃からサーバー側を守るためのフィルタとお考え頂ければと存じます。
サーバー側の処理ならgetで受けて処理するだけでは?
urlを前提にするところがよくわからないのですが・・・
サーバー側のメモリ高負荷を解消するための手段として、負荷がかかっているURLアクセスをサーバー前段で排除したいのが目的です。
他の方法でも検討していますが、選択肢として正規表現で該当のパターンを排除できるのか?という点について確認したいものになります。
回答2件
あなたの回答
tips
プレビュー