6/5 [PHP] メールフォーム
- [PHP] メールフォーム
[PHP] メールフォーム
今日は、メールフォーム設置時に考慮すべきセキュリティ面についての学びです。
それらを考慮のうえ、引き続き、作成中のメールフォームに機能を追加していきます。
send_mail について
- WordPressではできない。
- send_mailができる独自の環境があることが前提条件
- レンタルサーバーからのメールはサーバーがメールの送信者となる(送信者自身のメールアドレスとは異なるアドレスで送信される)
- 踏み台の温床にもなり得る
PHP セキュリティ
引き続き、作成中のメールフォームにセキュリティ対策用の記述を追加していきます。
作業手順
1. 予めメールフォーム(Check.php)をブラウザで開いておく
2. Chromeの設定をクリック
3. 「詳細を表示」をクリック
4.「プライバシー」-「コンテンツの設定」を選択
5. 「すべてのCookieとサイトデータ」をクリック
6. 検索バーで「loalhost」を検索
7.「PHPSSID」の表示があることを確認
⇒ 印の部分がセッション固有のセッションIDです。
セキュリティ対策で追加した記述
《init.php》
(1) 他者ページのiframe内から不正にページが読み込まれるのを防ぐ
header('X-Frame-OPTIONS:DENY');
上記コードを使用しない場合:
- 他者ページのiframe内で以下のように記述されると、自身のページが勝手に他者ページで表示されることになります。
<iframe src="自身のサイトURL"></iframe>
⇒前述の対策用記述を行うことで、他者ページでiframeによる呼び出しを行っても表示されなくなります。
参考:
iframe内からWebページが読み込まれるのを防止する
X-Frame-Options HTTP レスポンスヘッダ - buzzword update
http://buzzwordjp.blogspot.jp/2011/09/iframe-x-frame-options-http.html
(2)セッションIDの再生成
現在のセッション情報を維持したまま、セッションIDを新しく作り直します。
session_regenerate_id(true);
■セッションハイジャック対策
セッションハイジャック対策として以下をメールフォームに追記します。
《thanks.php》
■セッション変数を空にしたうえ、セッション変数を削除
$_SESSION['mail_data'] = array(); unset($_SESSION['mail_data']);
■セッション・クッキーを削除
クッキー削除の方法として、過去時刻(42000秒前)を設定しています。
if(isset($_COOKIE[session_name()] )) { setcookie( session_name(), '', time()-42000, '/'); }
■最後にセッションを破棄
session_destroy(); //セッションを破棄する
上記処理追記後にindex.phpからメールフォーム送信を実行し、その直後にCookieデータを確認する
↓ セッション情報が削除されていることが確認できる
XAMPP セッション情報確認
以下のパスを確認 c - xampp - tmp session_destroy() により、xamppの所定位置のセッションファイル情報が削除される。
参考サイト:
PHP開発エンジニア必読!最低限必要なセキュリティ対策 | Web制作会社スタイル:
http://www.hp-stylelink.com/news/2013/09/20130913.php
第25回 PHPのアキレス腱 ── セッション管理:なぜPHPアプリにセキュリティホールが多いのか?|gihyo.jp … 技術評論社:
http://gihyo.jp/dev/serial/01/php-security/0025
第3回 制御して 防いでこその セッションだ - セキュリティ講座:
http://www.phppro.jp/school/security/vol3/2
セッション管理の不備と対策(PHP編) | Webセキュリティの小部屋:
http://www.websec-room.com/2013/03/09/532
PHPでセキュアにセッションを行う方法:
http://promamo.com/?p=2033
PHPまとめ - セッション管理:
http://doremi.s206.xrea.com/php/tips/session.html
セッション管理とクッキー(cookie)の入門:
http://www.geocities.jp/sugachan1973/doc/funto62.html
PHPの基礎まとめ(メモ)- Qiitahttp:
http://qiita.com/kimriwon/items/85e92d29af34af804e7b