フォームの投稿データ(ログ)の保持と送信回数の制限


フォームの投稿データ(ログ)の保持と送信回数の制限

フォームから送信された内容は、投稿データ(ログ)としてデータベースに保存されます。ログには宛先・本文・接続元の IP アドレスなどの個人情報が含まれるため、残さない設定や、一定の期間で自動削除する設定ができます。また、同じ宛先・接続元からの送信が短時間に集中したときに、メール送信などを制限できます。

対応バージョン: Ver. 3.2.39 以降で利用できます。

ログを残さない

フォームの編集画面の「ログ」で「ログを残さないようにする」にチェックを入れると、そのフォームの投稿データはデータベースに保存されません。

フォームの編集画面の基本設定。「ログ」「ログの保持日数」を設定する

Ver. 3.2.39 以降は、新しくフォームを作成したときに、この項目にチェックが入った状態(ログを残さない)が既定になります。既存のフォームの設定は変わりません。投稿データを管理画面で確認する運用のフォームは、チェックを外してください。

ログの保持日数

フォームの編集画面の「ログの保持日数」に、投稿データを残す日数を指定します。この日数を過ぎたログは自動で削除されます。0 を指定すると削除しません(既定)。

  • 保持日数はフォームごとに設定します。

  • グローバルフォームでは、下位のブログで投稿されたログも、このフォームの保持日数の対象になります。

  • 数字以外や負の値を指定した場合は、誤って削除しないよう、無期限として扱います。

  • フォームをエクスポート・インポートしたときは、保持日数も引き継がれます。

削除は、通常のアクセスの終わりに 1 時間に 1 回まで実行されます。

投稿データの一覧画面からは、そのフォームの投稿データをすべて削除することもできます。

cron で削除する

アクセスが少ないサイトや、アクセスのタイミングで削除を走らせたくない場合は、通常のアクセスでの削除を止めて、cron で実行できます。

通常のアクセスでの削除を止めるには、a-blog cms 設置ディレクトリの「.env ファイル」に次を指定します。

FORM_LOG_PURGE_ON_REQUEST=off # off にすると、通常のアクセスでは削除しない

cron から実行する処理には、cron のサンプル(cron/example.php)に次の例があります。フォームごとの保持日数に従い、対象が無くなるまで削除します。

$deleted = App::make('form.log-purger')->purge(time());
acmsStdMessage('[Info] フォームの投稿ログを ' . $deleted . ' 件削除しました');

メールの送信回数の制限

未ログインの訪問者から、短時間に大量のメールを送らせることができないよう、フォームの送信に回数の上限を設けています。フォームの編集画面の「セキュリティ」で設定します。

「メール送信制限」には、回数を数える時間(分)と、同じ宛先・同じ接続元ごとの回数の上限を指定します。「送信停止時間」には、上限を超えたときに制限を続ける時間(分)を指定します。同じ接続元の上限を超えたときは投稿を受け付けず、同じ宛先の上限を超えたときは自動返信だけを止めます。

フォームの編集画面のセキュリティ設定。「メール送信制限」「送信停止時間」を設定する

入力欄を空にしたときは、config.system.yaml のデフォルト値が使われます。

コンフィグ

説明

既定値

form_mail_trial_time

回数を数える時間(分)

15

form_mail_trial_number

上の時間のあいだに、同じ宛先へ自動返信を送る回数の上限

3

form_mail_ip_trial_number

上の時間のあいだに、同じ接続元から受け付ける送信回数の上限

20

form_mail_lock_time

上限を超えたときに、制限を続ける時間(分)

15

デフォルト値は管理画面からは変更できません。変更するときは、config.system.yaml に指定します。