ワンタイムトークンは動いたが連続送信防止が動いてない?

ナカダさん (2024-01-15 16:01:33) mice.osaka-info.jp/en/businesses/contact_form/

お早いご返答ありがとうございました。
push @Modules,’onetimetoken’;
push @AddOns,’onetimetoken/onetimetoken.js’;
をオンにすることで無事動くことが出来ました。

ただ、もう一つの機能として「連続送信防止」を行いたいのですが
動いている気がしません。
エラーはたいていトークンのものが出て、「ご利用のIPアドレスは現在送信が制限されています。」は出たことが無いです。
push @AddOns,’ipblock.js’;
push @Modules,’ipblock’;
こちらどちらもONにしています

対象ページではテストとして
トークンの有効期限を600秒(秒で問題ないですか?)
連続送信をブロックする秒数を3600秒としています。

これで行くと、トークンが切れても連続送信防止機能で送信できないのでは?と考えたのですが
送信できてしまいます。

加えて、よくよく考えたらトークンも600で設定しているのに1分以内になったら送れているような気がします。

連続送信防止機能とは具体的にどのような連続送信を防ぐのか、
そもそも設定が間違っているのか、や
トークンの有効期限の数字はどのような意味なのか等、ご教授頂けますと幸いです。
環境としては固定WIFIを有線で使用しているのでIPが変わることはないと思います。

機能の意味合いがちょっと異なります

和田 (2024-01-15 22:33:23) www.synck.com

連続送信防止機能はワンタイムトークンとは全く無関係でして、同一IPアドレスから連続的に送信を試みられた場合にシャットダウンするための機能になります。現在、ボットから極めて短時間に大量のメール送信が行われる、というような被害が増えていることから、最初の1発目だけは通すけど、その後の数百数千通は通しませんよ!という機能です。

最初の1通目の送信時点でIPアドレスをサーバ上に記録し、2度めの送信時に一定のインターバル(初期設定では3600秒=1時間)以内の送信ができなくなる、というものです。

回答ありがとうございます。

ナカダさん (2024-01-16 16:16:36) mice.osaka-info.jp/en/businesses/contact_form/

最初の1通目の送信時点でIPアドレスをサーバ上に記録し、2度めの送信時に一定のインターバル(初期設定では3600秒=1時間)以内の送信ができなくなる、というものです。

とのことですが、固定IPを使っている社内で1時間以内に送信完了したフォームにもう一度アクセスして送信した際に送信できてしまうのは機能が正常に動いていないということでしょうか?

もしくは、再度リンクを入力してアクセスしている時点で連続送信ではないということでしょうか?
※たいていの迷惑メールはページを巻き戻って送信している可能性がある


加えて、ワンタイムトークンの有効期限の数字の意味をご教授頂けますと幸いです。
秒数かと思っているのですが…

そうですね、連続送信ブロック機能は動いていないかも

和田 (2024-01-16 17:17:49) www.synck.com

しれません。正常に動いている場合、data/ipblock/フォルダにIPアドレス毎のファイルが生成されているはずなのですが、生成されていない場合は正常に動作していないと思います。

IPアドレス毎のファイルが生成されていない

ナカダさん (2024-01-17 14:48:36) mice.osaka-info.jp/en/businesses/contact_form/

確認しました。
data/ipblock/フォルダにIPアドレス毎のファイルは生成されておりませんでした…

動かない要因として何か考えられることはありますか?

これまで何度かメールフォームプロは利用させていただいたのですが、
この手の機能を使うのは初めてで何が問題か分からずでして…

該当ディレクトリのパーミッションが

和田 (2024-01-17 16:19:02) www.synck.com

書き込み可能なパーミッションになっていない場合などはファイルが生成されない場合がございます。

ipblockのパーミッションを777にしたら動きました。

ナカダさん (2024-01-17 16:20:37) mice.osaka-info.jp/en/businesses/contact_form/

お世話になっております。
質問後、パーミッションを777にしたところ正常に動きました。
大変失礼いたしました。

連続送信に関しては大丈夫だと思います。

また、ワンタイムトークンですが、
先日質問した通り下記で設定しているのに1分くらい経ったら送れるようになっている気がします。
下記の設定方法で不備等ありそうでしょうか?

ーーーーーーーーーーーーーー

## トークンを記録するディレクトリ
$config{"onetimetoken.dir"} = "$config{’data.dir’}onetimetoken/";

## トークンのキー(なんでもよい)
$config{"onetimetoken.key"} = ’’;←0~9の数字をランダムに配置しています(念のため割愛)

## エラーメッセージ
$lang{’WarningOnetimeToken’} = ’トークンの有効期限が切れています。<br>The token has expired.’;

## トークンの有効期限
$config{"onetimetoken.exp"} = 600;
1;

## トークンの有効期限の数字は600秒と認識しているのですが問題ございませんでしょうか?
ご確認お願いいたします!

ワンタイムトークンについて

和田 (2024-01-17 16:36:52) www.synck.com

> 先日質問した通り下記で設定しているのに1分くらい経ったら送れるようになっている気がします。
> 下記の設定方法で不備等ありそうでしょうか?
ワンタイムトークンですが、これは
・フォームを開いた時にCGIからランダムなトークン(パスワードのようなもの)を発行してフォームにわたし、発行したトークンをサーバに記録しておく
・メール送信時にそのトークン(パスワードのようなもの)と一緒にCGIに送信内容を送る
・CGI側でトークンが存在するか、トークンが有効期限内か、をチェックして問題なければ送信する

というような処理を行っております。なんでこんなクソめんどくさいことをやっているかというと、「フォームを開かないとトークンが取得できない」という状況を作るためです。多くのボットはフォームを介さず直接mailformpro.cgiに攻撃を行ってきます。そのため、トークンを照会することで、フォームを介さない送信をすべて遮断することができる、という仕組みになっております。

トークンに有効期限が設定されているのは、過去に発行されたトークンを利用されることを防ぐためになります。トークンの有効期限が600秒(10分)の場合はフォームの入力を10分以内に収める必要があるため(フォームを開いてから10分経過するとトークンの有効期限が切れるため)、もう少し長めに有効期限をとってもよいかもしれません。

クソ長くて分かりづらい説明になってしまい申し訳ございません・・・。

トークンの有効時間に関して

ナカダさん (2024-01-17 17:57:51) mice.osaka-info.jp/en/businesses/contact_form/

ご丁寧な説明ありがとうございます!

なるほど…
今回の経緯として、大量に迷惑メールが送信されることがあったため、それを防ぎたく、
個人的にはトークンの有効期限が1分くらいでいいかなと思ったのですが、

トークンの有効期限を短くした場合、
一般のお客様が入力し終わる前にトークンが切れてしまって送信不可になることもあるということでしょうか???

たくさん質問してしまい恐縮です…

はい。認識の通りで相違ございません。

和田 (2024-01-17 18:26:06) www.synck.com

> 一般のお客様が入力し終わる前にトークンが切れてしまって送信不可になることもあるということでしょうか???
こちらはそのような感じです。

平均どれくらい等ありますか?

ナカダさん (2024-01-18 16:38:29) mice.osaka-info.jp/en/businesses/contact_form/

1分では短く、一般の方が送れないとのこと、承知いたしました。

ワンタイムトークンの機能を使用している方は一般的に何秒ほどの設定をしているか、
分かればご教授頂きたいです。

また、今600と設定しているのですが、
テスト送信をしていた際、送信完了後すぐ再度フォームを送信した時にトークンが無効とありました。
この要因は何か考えられますでしょうか。

また、10分以上にしていたら連続送信してくる攻撃を防げないのではとも考えたのですが、
この攻撃は送信完了後ページを戻って再送してくるため、時間が何分であれトークンが一致せず送信不可になる‥‥と考えて問題ないでしょうか?

平均はフォームによって大きく異なると思います

和田 (2024-01-19 14:10:53) www.synck.com

入力時間の平均値を算出する機能がついていますので、実際に運用しながらどの程度の入力時間がかかっているか調べていただけると助かります。

> 送信完了後すぐ再度フォームを送信した時にトークンが無効とありました。この要因は何か考えられますでしょうか。
ブラウザ等によりますがキャッシュの可能性もあるかもしれません。

> 10分以上にしていたら連続送信してくる攻撃を防げないのではとも考えたのですが、この攻撃は送信完了後ページを戻って再送してくるため、時間が何分であれトークンが一致せず送信不可になる‥‥と考えて問題ないでしょうか?
連続送信を防ぐためのものではないので、連続送信を防ぐ場合は連続送信ブロック機能をご利用ください。

/data/onetimetoken/の発生条件が知りたい

ナカダさん (2024-01-19 17:56:26) mice.osaka-info.jp/en/businesses/contact_form/

かしこまりました。
実際のフォームの平均時間を調査いたします。

また、分かればで大丈夫なのですが、/data/onetimetoken/の中に生成されるcgiの規則性を確認しているのですがいまいちわからずで・・・

送信完了した際に、ブラウザバックをせず再度フォームに訪問した際、
トークンが追加されない時と追加されるときがあって、今どのトークンが効いているのか、
よくわからなくなっておりました…

同じブラウザタブ内でフォームに再訪問した際のトークン発生条件とか何かあれば、
ご教授頂けますと幸いです…!!

Re:

和田 (2024-01-19 19:32:21) www.synck.com

> 分かればで大丈夫なのですが、/data/onetimetoken/の中に生成されるcgiの規則性を確認しているのですがいまいちわからずで・・・
ランダムなので規則性はありません。

> 同じブラウザタブ内でフォームに再訪問した際のトークン発生条件とか何かあれば、ご教授頂けますと幸いです…!!
ブラウザによって挙動が微妙に異なりますので…。

トークン発生条件をお伺いしたいです

ナカダさん (2024-01-26 09:47:24) mice.osaka-info.jp/en/businesses/contact_form/

トークンがどの時に発生し、消えるのかお伺いしたいです。

今回の攻撃が、サンクスページ到達後ブラウザバックし再送するをロボットが繰り返すものだったので、それを止めたいです。

今回、ワンタイムトークンを入れましたが、ブラウザバックした際にトークンがdataファイルから消えたので、おそらくこの事案に関しては問題ないかな?と思っていますが、
サンクスページに到達した人が再度リンクを踏んでフォームに来た際のトークンの発生挙動が結構バラバラで…発生にする条件とかに規則性はあるのでしょうか…!

また、社内でテスト送信を行った際、
サンクスページ後ブラウザバックした際に、フォームに記入した内容が記録されておりそのまま送ると「英語のみで送信できない」エラー文が表示されるとのことで、フォーム内容の記録を解除したいと思い「noresume.js」を起動しております。
ただこれを起動してもブラウザバックした際は残っていて、ページをリロードしたら消えます。

そもそもブラウザバックした際に記載内容を消すことはメールフォームプロでは可能でしょうか?
もしくは、日本語の時も英語のみと書かれたエラー文ですので、エラー文を調整等できるのでしょうか?(再度入力してください等・・・)

以下の通り回答申し上げます。

和田 (2024-01-26 13:37:21) www.synck.com

> トークンがどの時に発生し、消えるのかお伺いしたいです。
トークンはトークンを所持しないブラウザからリクエストがあった場合に生成され、送信後あるいは有効期限が切れた場合に削除されます。

> サンクスページ後ブラウザバックした際に、フォームに記入した内容が記録されておりそのまま送ると「英語のみで送信できない」エラー文が表示されるとのことで、フォーム内容の記録を解除したいと思い「noresume.js」を起動しております。
ただこれを起動してもブラウザバックした際は残っていて、ページをリロードしたら消えます。
ブラウザバックした際に入力内容が残っているのはブラウザの仕様です。

> そもそもブラウザバックした際に記載内容を消すことはメールフォームプロでは可能でしょうか?
まだ公開されていませんが、そのような機能は一応ございます。公開されていませんが・・・。

> 日本語の時も英語のみと書かれたエラー文ですので、エラー文を調整等できるのでしょうか?
エラー文言はconfigs/lang.ja.js に記載されております。

トークンが送信後消えていないような…

ナカダさん (2024-01-26 15:52:55) mice.osaka-info.jp/en/businesses/contact_form/

dataを見ながらフォームの送信を行ったのですが、
トークンのデータはdataの中に残ったままのような気がします。
残ってはいるものの有効ではないのでしょうか?
ただ、トークンがそのまま残っていて再度送信できたことがあったような気がします。

まだ公開されていませんが、そのような機能は一応ございます。公開されていませんが・・・。
>まだ実装されておらず、今後出てくる予定があるということでしょうか…!!

エラー文の調整の場所ありがとうございます!
調整いたします!!

CDNなどはご利用でしょうか?

和田 (2024-01-26 16:18:23) www.synck.com

CDNやバランサーなどをご利用の場合、トークンデータが消えていないような感じになる場合がございます。その場合、CDNを無効にしていただく必要などがございます。

今後公開したいなとは思っているのですが、時期はかなり未定でして、
on-ze.com/archives/7522
↑上記のページで紹介されているような方法で実装していただいたほうがよいかもしれません。