フォーム & バリデーション
アプローチ方法(JavaScript + PHP使用)
目標: クライアント側バリデーション機能(JavaScript)を持つフォームを構築し、PHPMailer(SMTP)を使用してセキュアなメール送信処理を実装する。
リソース
ソース構造
/form-training/
│
├── index.php
├── confirm.php
├── thanks.php
├── sendmail.php
├── /assets/
│ ├── style.css
│ └── validate.js
└── /vendor/
処理フロー
index.php → (validate.js) → confirm.php → sendmail.php → thanks.php
実装要件
- サンプルデザインに従って
index.phpでフォームUIを構築する - ComposerでPHPMailerライブラリをインストールする
- form action、form methodの機能について学習する
- POSTメソッドでフォームを送信する(絶対にGETを使用しない)
- JavaScript でバリデーションを構築する(フォーム送信前のチェック)
- バリデーションが有効な場合、
confirm.phpにリダイレクトし、ユーザーが入力した全ての情報を再表示する(レイアウトは自作) - confirm.phpページで、ユーザーが送信を確認し た際、
sendmail.phpでメール送信処理を実行する - メール送信が成功した場合、
thanks.phpにリダイレクトする - メール送信が失敗した場合、入力済みデータを保持する(フォームをクリアしない)
- PHPMailerのSMTP設定で実際のアカウントを使用してメールを送信する
- 送信されるメール内容にフォームの全データフィールドが含まれていることを確認する
セキュリティ設定
1. CSRFトークン
偽装リクエスト(Cross-Site Request Forgery)を防ぐためのトークンを生成・検証する。
2. サーバーサイドバリデーション
メール送信前にconfirm.phpでPHPを使用して全データを再検証する(ユーザーがJavaScriptをバイパスした場合に備える)。
3. ハニーポットフィールド
自動フォーム送信ボットを検出するための非表示入力フィールドを追加する。
4. タイムトラップ
フォーム入力開始時間を記録し、送信者が有効かどうかを判定する(ボットの高速送信を防ぐ)。
5. 出力データのエスケープとエンコード
HTML に表示されるすべてのユーザーデータ(confirm.php、thanks.php、メールなど)はhtmlspecialchars()で処理する必要がある。
6. reCAPTCHA設定
Google reCAPTCHAを統合して自動フォーム送信ボットを防ぐ。