Bot とかで大量に問い合わせフォームにリクエストしてくる人がいて困りますよね。
POSTリクエストにリファラとして自ドメインが設定されていない場合は、ブラウザ経由ではなく、直接叩いてるんだろうと仮定してブロックしちゃうのも良いかもしれません。
Nginx で設定するなら、こんな感じ
location ~* ^/contact {
valid_referers server_names;
set $allowed 1;
if ( $invalid_referer ) {
set $allowed 0;
}
if ( $request_method != 'POST' ) {
set $allowed 1;
}
if ( $allowed = 0 ) {
return 404;
}
Nginx の if 文では複数の条件を書くことができない、else を使用することができないという縛りがあるので、上記のような記述方法になります。
valid_referers server_names;
は、リファラチェックして自ドメインからのリクエストじゃない場合は $invalid_referer
に 0
をセットします。
$allowed
という変数を 1
で初期化しておいて。
$invalid_referer
だったら 0
をセットする。
$request_method
が POST
以外だったら 1
をセットする。
これで $allowed
が 0
なら、「許可されていないリファラがセットされている、かつ、POSTメソッドでのリクエスト」ということになるので、404 を返します。