Skip to content

[フォーム] ハニーポット機能を追加しました#2356

Merged
masaton0216 merged 4 commits intomasterfrom
add-form-honey-pot
Jan 29, 2026
Merged

[フォーム] ハニーポット機能を追加しました#2356
masaton0216 merged 4 commits intomasterfrom
add-form-honey-pot

Conversation

@masaton0216
Copy link
Contributor

@masaton0216 masaton0216 commented Jan 29, 2026

概要

フォームプラグインにスパムボット対策として「ハニーポット」機能を追加しました。

背景・目的

従来、フォームのスパム対策としてメールアドレス・ドメイン・IPアドレスによるブロックリストを提供していましたが、これらは「投稿後にスパムと判定する」方式でした。ハニーポットを導入することで、より効果的に事前にボット投稿を検出・ブロックできるようになります。

変更内容

主な機能

  • ハニーポットによるボット検出

    • CSS(opacity: 0、サイズ0)で人間には見えない隠しフィールド website_url を設置
    • ボットが自動入力することで検出し、投稿をブロック
    • ブロック時は「不正な投稿が検出されました。」とエラーメッセージを表示
    • ブロック履歴を spam_block_histories テーブルに記録
  • ブロックリスト管理の統一

    • 従来の「スパムリスト」表記を「ブロックリスト」に変更
    • スパム管理画面とフォーム設定画面でハニーポットの有効/無効を切り替え可能
    • 全体設定(すべてのフォームに適用)と特定フォーム設定に対応

技術的改善

  • ブロック種別バッジを共通コンポーネント化(spam_block_type_badge.blade.php
  • ビューのロジックをコントローラに移譲(MVC原則の徹底)
  • 重複コード削減

UI変更箇所

  • スパム管理画面:「スパムリスト」→「ブロックリスト」
  • フォーム設定画面:ハニーポット選択時は値入力フィールドを非表示
  • ブロック履歴画面:ハニーポットによるブロックも表示

レビュー完了希望日

軽微な改修なので急ぎません

関連Pull requests/Issues

なし

参考

ハニーポット(Honeypot)は、Webフォームのスパム対策として広く使われている手法です。人間には見えない隠しフィールドを設置し、ボットが自動的にすべての項目を入力しようとする特性を利用して検出します。

参考: https://en.wikipedia.org/wiki/Honeypot_(computing)

DB変更の有無

有り

マイグレーション

  • 2026_01_29_100001_make_block_value_nullable_in_spam_lists.php
    • spam_lists.block_value カラムを nullable に変更
    • 理由: ハニーポットは値を必要としないため

チェックリスト

  • プルリクエストにわかりやすいタイトルとラベルを付けました。https://github.com/opensource-workshop/connect-cms/wiki/Pull-requests-Rule
  • コードスタイルチェック(phpcs)を実行し、違反がないことを確認しました
  • テストを作成し、すべてパスすることを確認しました(tests/Feature/Plugins/User/Forms/FormsHoneypotTest.php
  • 既存機能への影響がないことを確認しました
  • マイグレーションファイルを作成しました

補足:主な変更ファイル

新規作成

  • database/migrations/2026_01_29_100001_make_block_value_nullable_in_spam_lists.php
  • resources/views/plugins/common/spam_block_type_badge.blade.php
  • resources/views/plugins/user/forms/default/include_honeypot_field.blade.php
  • tests/Feature/Plugins/User/Forms/FormsHoneypotTest.php

主な修正

  • app/Enums/SpamBlockType.php - honeypot 種別追加
  • app/Plugins/User/Forms/FormsPlugin.php - ハニーポットチェック・記録機能追加
  • app/Plugins/Manage/SpamManage/SpamManage.php - バリデーション調整
  • スパム管理画面・フォーム設定画面の各ビューファイル(表記変更、UI改善)

動作確認項目

  • ハニーポット有効時、入力画面に隠しフィールドが出力される
  • ハニーポットに値がある場合、確認画面でエラーメッセージが表示される
  • ブロック履歴に正しく記録される
  • スパム管理画面でハニーポットの登録・削除ができる
  • 全体設定と特定フォーム設定が正しく動作する
  • ハニーポット無効時は通常通り投稿できる

@masaton0216 masaton0216 self-assigned this Jan 29, 2026
@masaton0216 masaton0216 added the enhancement 機能強化 label Jan 29, 2026
@masaton0216 masaton0216 merged commit b39b15e into master Jan 29, 2026
1 check passed
@masaton0216 masaton0216 deleted the add-form-honey-pot branch January 29, 2026 07:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement 機能強化

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant