CodeZine(コードジン)

特集ページ一覧

PHP、MySQL、JavaScriptによるセキュアなインターネットファイル共有システムの作成

Smartyを利用したテンプレートとロジックの分離

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/07/01 14:00

ダウンロード サンプルソース (14.8 KB)

目次

コードの解説

 PHPコードはこのサンプルの「接着剤」となる部分です。ソースコードのアプリケーションルートディレクトリ下には4つのPHPファイルがあります。メインファイルは「file_sharing.php」で、このファイルによってインクルードされる他のすべてのファイルに「inc.*.php」という名前を付けることにしました。

 ローカルインストールに固有のグローバル変数はすべて「inc.config.php」に入れました。つまり、本稿のダウンロードファイル(zipファイル)を解凍した後、このファイルに変数を適切に設定することでファイルを環境に適応させることができます。

 「inc.vars.php」ファイルには、PHPセッション開始メカニズム(ここでは、タグソートとファイルソートのメソッドプロパティを渡す目的にのみ使用)と、便宜上必要なその他のグローバル変数、およびすべてのSmartyテンプレートに有効なグローバルな代入が含まれています。

 「inc.util.php」ファイルには、主にコードの行数を削減することを目的とするいくつかのユーティリティ関数が含まれています。一部のルーチンはデータベースアクセスを実装するので、データベース抽象化レイヤの使用例として注目に値します。これらの関数はPEAR MDB2 APIを使ってMySQLにアクセスします(このアプローチの長所については、次のセクションで実装例を取り上げながら詳しく説明します)。

 「file_sharing.php」ファイルは、すべてのHTTP要求を処理してGETメソッドまたはPOSTメソッドから渡された変数を構文解析する中心ファイルです。処理を構文解析した後、プログラムはイベントの管理に必要なデータをすべて取得して、そのデータをSmarty構造に割り当て、表示します。

PEARによるデータベース抽象化

 PEARは、PHP開発をスピードアップできるPHPライブラリ(パッケージ)の巨大なリポジトリです。このプログラムでは、メインのPEARパッケージは、データベース抽象化の最新ソリューションであるMDB2ライブラリです。この例ではMySQLデータベースを使いますが、このソリューションはコードに少し変更を加えるだけで、他の環境(例えば、Oracleをデータベースとする企業など)でも実行できます。MySQLの関連するPEARコンポーネントをインストールした後で別のデータベースを使用するために必要なことは、「inc.config.php」内の$dsn変数の値を変更することだけです。この変数には、DSNのドキュメンテーションに記載されているルールに従って有効なデータソース名(Data Source Name:DSN)を入れる必要があります。

 MySQLに使用したDSNは次のとおりです。

$dsn = 'mysql://user:password@mysql_server/mysql_db_name

 つまり、データベース呼び出しはすべて、基礎となっているデータベースに関して完全に透過的です。

 MySQLの代わりに別のデータベースを使いたい場合は、同じデータベーススキーマを作成する必要があります。もちろん、ファイル「file_sharing.sql」は有効ではありませんが、このファイルには、別のRDBMSを使ってデータベースを構成するために変換しなければならないSQLステートメントが含まれています。

ファイルの暗号化による機密保護

 このファイル共有アプリケーションの例では、128ビットキーのAES(Advanced Encryption Standard)アルゴリズムを使って、パスフレーズを暗号化形式(RFC 3174セキュアハッシュアルゴリズムに記載されているSHA1 160ビットチェックサムを使用)で保存することで、ファイルを必要に応じて暗号化形式で保存することができます。暗号化されたファイルの操作には必ずこれらのパスフレーズが必要なので、次の重要なガイドラインを覚えておきましょう。

  • パスフレーズを失うとファイルをダウンロードできなくなるので、MySQLコマンドでファイルを削除しなければなりません。さらに、データとパスフレーズは平文でインターネット上を移動します。対応策として、インターネット上で送信する前に、JavaScript関数を使ってローカルでデータの暗号化とパスワードのハッシュ化を行うことをお勧めします。
  • MySQLの代わりに別のデータベースを使いたい場合は、PHPコードで暗号化とハッシュ化に使用されているMySQL関数を同等の関数に置き換える必要があります。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

著者プロフィール

  • Roberto Giorgetti(Roberto Giorgetti)

    イタリアに拠点を置くITマネージャ、テクニカルライター。主にビジネス分野と工業分野でオープンソースの開発に従事。核工学の学位を持つ。

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5