My Web道

WEB制作科 受講記録 …とその後も続くWEB制作に関する活動・学習記録です。

6/5 [PHP] メールフォーム

f:id:sntkk3:20140228223724g:plain

  • [PHP] メールフォーム

[PHP] メールフォーム

今日は、メールフォーム設置時に考慮すべきセキュリティ面についての学びです。
それらを考慮のうえ、引き続き、作成中のメールフォームに機能を追加していきます。


send_mail について

  • WordPressではできない。
  • send_mailができる独自の環境があることが前提条件
  • レンタルサーバーからのメールはサーバーがメールの送信者となる(送信者自身のメールアドレスとは異なるアドレスで送信される)
  • 踏み台の温床にもなり得る

PHP セキュリティ

引き続き、作成中のメールフォームにセキュリティ対策用の記述を追加していきます。

セッション攻撃対策

セッション情報確認

作業手順

1. 予めメールフォーム(Check.php)をブラウザで開いておく

2. Chromeの設定をクリック
f:id:sntkk3:20140608224024p:plain

3. 「詳細を表示」をクリック

4.「プライバシー」-「コンテンツの設定」を選択

5. 「すべてのCookieとサイトデータ」をクリック
f:id:sntkk3:20140608224028p:plain

6. 検索バーで「loalhost」を検索
f:id:sntkk3:20140608224034p:plain

7.「PHPSSID」の表示があることを確認
f:id:sntkk3:20140608224031p:plain
⇒ 印の部分がセッション固有のセッションIDです。

f:id:sntkk3:20140608224038p:plain


セキュリティ対策で追加した記述

《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データを確認する
↓ セッション情報が削除されていることが確認できる
f:id:sntkk3:20140608224019p:plain


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