ちょっと話題の記事

【新機能】AWS WAFがリクエストボディに対応しました!!

2016.01.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

最近はもっぱら育児にはげんでいる森永です。娘超かわいいです。

なんと!AWS WAFがリクエストボディに対応しました!
今まではリクエストヘッダしか見れなかったので、POSTの通信を引っ掛けることが出来ませんでしたが、今回のアップデートでPOST通信についても対応できるようになりました!

早速試してみる

AWS WAFの管理画面で早速試してみます。
WAFの名前と、CloudWatchのメトリクス名を入力します。

AWS_WAF01

「Filter settings」でフィルタの設定をするのですが、リクエストのどの部分でフィルタするかという「Part of the request to filter on」に「Body」が追加されていることが分かります。

AWS_WAF02

今回は以下の様なフィルタを作成しました。
「SomethingBad」という文字列がリクエストボディに含まれていたら検出するというものです。

AWS_WAF03

次にルールを作ります。
先ほど作成したフィルタに一致すれば、というルールです。

AWS_WAF04

webACLにルールを設定していきます。
作成したルールが条件を満たした場合に、「Deny」するという設定にしました。
それ以外は全て通したいので「Default action」は「Allow all requests that don't match any rules」を選択します。

AWS_WAF05

最後にAWS WAFをかぶせるCloudFrontを選択します。
今回はテストのため、PHPをインストールしたEC2を後ろに配置したものを選択します。

AWS_WAF06

では早速テストしてみます。
以下の様な雑なテスト用フォームを作ります。
POSTを弾けるのかを見たいのでPOSTするものであればなんでもいいです。

index.html

<h1>BodyDetectTest</h1>
<form action="action.php" method="post">
 <input type="text" name="something" />
 <input type="submit" />
</form>

action.php

<?php echo $_POST['something'] ?>

まずは、問題なさそうな文字列「SomethingGood」を送信します。

AWS_WAF07

こちらは問題なく「SomethingGood」と表示されました。
次に、問題ありそうな「SomethingBad」を送信します。

AWS_WAF08

すると、「ERROR」が表示されリクエストがブロックされたことが分かります!
ちゃんとリクエストボディを見てブロックしてくれたことが分かります!!

AWS_WAF09

最後に

リクエストボディが見れるようになったことで、AWS WAFの有用性が格段にアップしました。
今後更に、サードパーティのAWS WAF対応が加速していくのではないかと予測しています。
期待しましょう!