共通する機能をまとめる


common/common.phpの作成と既存PHPスクリプトの書き換え

セッション配列($_SESSION)の値をチェックしてログイン済みかどうかを判断する処理はtop_page.php, learning.phpでも同一です。従ってこれは一つのPHPファンクションlogin_checkにまとめて共通化しましょう。ついでに,MySQLサーバに接続する処理(dbconnect.php)の機能も,common/common.phpにまとめてしまいます。

まず,現在のchallengeフォルダ(ディレクトリ)の下にcommonフォルダを作り,dbconnect.phpの内容をコピペし,その下にログインチェック関数を作ります。

common/common.php

次に,dbconnect.phpを呼び出しているPHPスクリプトを,全てcommon/common.phpを呼び出すように書き換えます。

変更前
  ↓  3行目を変更   ↓
変更後

下記のPHPスクリプトを上記のように変更して下さい。

top_page.phplearning.phpはログインチェック部分もlogin_check関数を使って共通化できるので,次のように書き換えます

top_page.php

learning.php

セキュリティの確保

これ以降は,共通する機能や変数の操作は全てcommon/commo.phpに記述し,なるべくPHPスクリプトの行数を少なく抑えるようにしていきます。逆に,重要かつセキュリティ上保護すべき機能も書きこまれることになりますので,これを放置してはいけません。以下,Webアプリケーションのセキュリティを確保する手続きを説明します。

dbconnect.phpを削除する

今まで使ってきたdbconnect.phpを放置していてはセキュリティ上問題がありますのでこれを削除します。保存したければブラウザからアクセスできないフォルダにコピーしておいて下さい。

common/common.phpのアクセスを制限する

common/common.phpもWebブラウザからダイレクトにアクセスできないようにしましょう。そのためには

  1. htdocsより上の階層のフォルダに置いておく
  2. Apacheのアクセス制限機能を使う
という2つの方法が使えます。ここでは2について解説します。

Apacheの設定にもよりますが,ユーザー側で追加のアクセス制限をかける時には,同じフォルダに.htaccessというテキストファイルを作成し,指定したファイル・フォルダのアクセスを制限することができます。例えばcommon/common.phpを外部からアクセスできないようにするためには.htaccess

とします。実際これでアクセスできなくなったかどうかをhttp://localhost/challenge/common/common.phpにアクセスして確認して下さい。

と出れば制限されていることが確認できます。

Copyright (c) 2014-2017 幸谷研究室 @ 静岡理工科大学 All rights reserved.
Copyright (c) 2014-2017 T.Kouya Laboratory @ Shizuoka Institute of Science and Technology. All rights reserved.