レベル: 初級 杉田 直哉, Writer, ITmedia
2007年 03月 30日 PHPはスクリプト言語であるため、PHPでアプリケーションを作成して配布すると、ソースコードが読める状態になってしまいます。最終回となる今回は、PHPのソースコードをバイナリ/難読/暗号化する「Zend Guard」を紹介します。
PHPはスクリプト言語であるため、PHPでアプリケーションを作成して配布すると、「オープンソースとして公開する/しない」という意図にかかわらず、ソースコードが読める状態になってしまいます。しかし、商用製品などでは、クライアントにソースコードを公開したくない場合もあるでしょう。今回は、PHPのソースコードをバイナリ/難読/暗号化する「Zend Guard」を紹介します。
Zend Guardの機能
Zend Guardは、PHPスクリプトに対してバイナリコードへ変換、難読化、暗号化を行える商用ソフトウェアです。PHPによって開発されたアプリケーションを商用製品として販売する場合や、ソースコード改ざんから保護したい場合など、セキュリティ面での強化をもたらします。
ソースコードの保護
Zend Guardは、ソースコード保護のためにコードの難読化/暗号化/中間コード化を行います。中間コードはPHPスクリプトを実行コードに変換する途中結果であるため、インタープリタで発生する実行時コンパイルのオーバーヘッドを減少させる効果があります。
リスト1のソースコードを難読化/暗号化/中間コード化した例を図1~3に示します。どれも可読なコードにはなっていませんが、レベルによって行われている処理は違います。Encoding Onlyの場合、最適化は行われますが難読化は行われず、単純にバイナリコードへ変換されるのみとなります。Basicの場合はローカル関数が難読化の対象に入ります。対象が1つのスクリプトファイル内で完結するため、異なるレベルでエンコードされたバイナリファイルを組み合わせて扱うことを想定しています。Strongの場合、関数のコール、クラス名、クラスのメソッド、ローカル変数も難読化の対象となり、最高レベルのセキュリティが保証されます。
リスト1エンコードする前のソースコード
<?php
set_include_path('./_/library/');
require_once 'config.php';
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('./_/application/controllers');
?>
|
図1 Obfuscation(難読化):Encoding Onlyの場合
図2 Obfuscation(難読化):Basicの場合
図3Obfuscation(難読化):Strongの場合
なお、Encoding OnlyとBasicを使う場合はZend Optimizer 2.6以上、StrongはZend Optimizer 3.0以上の稼働するPHPランタイムをインストールする必要があります。
エンコードを行う手順は図4のようになります。プロジェクトを作成*した後、エンコード対象のファイルをインポートします。ディレクトリ階層が分かれているアプリケーションは、インポートすることでTargetのディレクトリへ出力されるようになります。その際、PHPスクリプト(*.php)以外のファイルも出力対象として含めることができますが、エンコード処理は行われません。
図4ソースコードを難読化/暗号化/中間コード化する手順
拡大図
ライセンス管理
Zend Guardではライセンスを付与し、アプリケーションの稼働条件としてライセンスファイルを結びつけることも可能です。ライセンス管理されたアプリケーションには、次のような制約を付与できます(図5、6)。
- 同時ユーザー数:上限を設定できる
- 使用期間:使用可能期を設定できる
- ネットワークセグメント:IPアドレスの範囲を設定できる
- サーバ:アクセス可能なハードウェアを設定できる
図5 ライセンス条件の設定画面
図6ライセンス管理の仕組み
拡大図
コラム:商用製品で加速するPHP開発
Zend Technologiesでは、PHP開発を効率化するソフトウェアを商用製品として発売しています。本文で紹介したZend Guardもそのうちの1つですが、2007年3月現在、Zend Platform 2.2.2、Zend Studio 5.5といった製品がリリースされ、日本ではオープンソース・ジャパンが販売代理店となっています。ここでは、Zend Platform/Zend Studioの特徴を見てみましょう。
Zend Platform 2.2.2
Zend Platformは、高度な運用管理機能を提供する製品です。ここでは主な機能を紹介します。
Session Clustering
PHPは、標準でセッション管理機能を備えています。これは、アクセスしてきたクライアントをサーバ側で一意に識別し、継続したサービスを提供するための機能です。ただし、セッション情報は1つのWebアプリケーションサービス内部でしか利用できず、Webアプリケーションサーバをクラスター化して運用している場合などには、セッション情報を共有できませんでした。
この問題を解決するのが、セッションクラスターリング機能です。この機能は、複数のWebアプリケーションサービス間でセッションの情報を共有できるようにするものです。
PHP Intelligence
PHP Intelligenceは、PHPスクリプトの実行状態を細かに管理する機能です。例えば、あるPHPスクリプトがどの程度の処理速度で実行できているのかや、関数エラー/DBクエリエラーなどが発生していないかどうかを検出できます。また、問題が発生したときの環境を保存できるため、後で原因の追究に利用できます。
PHP Performance Management
PHP Performance Managementは、PHPスクリプトやコンテンツをキャッシュするなどして、PHPアプリケーションのパフォーマンスを向上させるための機能です。
PHP/Java Integration Bridge
PHP/Java Integration Bridgeは、PHPスクリプトの中からシームレスにJavaVMへアクセスする機能です。
Zend Studio 5.5
Zend Studioは、PHP開発に利用できるIDE(統合開発環境)です。IDEの基本機能といえるシンタックスハイライティングや変数名/メソッド名の補完機能を備えるほか、次のような機能を備えています。
- PHPアプリケーションの実行時間を詳細に把握できるプロファイラ
- CVS/Subversionと連携したバージョン管理機能
- DBMSに接続してスキーマやデータを参照/変更できる機能
- ソースコードを解析して問題が発生しがちな個所をチェックする機能
- ソースコード内のコメント(phpDoc形式のもの)を抽出してドキュメント化する機能
このページで出てきた専門用語
-
プロジェクトを作成
- ウィザードで各種設定を行えますが、通常画面の右側に位置するタブで設定を変更することも可能です。
参考文献
著者について  | |  | 杉田直哉,ITmedia |
記事の評価
|