PHPはスクリプト言語であるため、PHPでアプリケーションを作成して配布すると、ソースコードが読める状態になってしまいます。今回は、PHPのソースコードをバイナリ/難読/暗号化する「Zend Guard」を紹介します。
この連載のバックナンバーは以下の通りです。併せてお楽しみください。
連載第1回:PHP開発でZend Frameworkを知らないだなんて嘘ですよね?
連載第2回:Zend Frameworkの各コンポーネントを一気に制する
連載第3回:ブログツールで学ぶ実践的Zend Frameworkの使い方
PHPはスクリプト言語であるため、PHPでアプリケーションを作成して配布すると、「オープンソースとして公開する/しない」という意図にかかわらず、ソースコードが読める状態になってしまいます。しかし、商用製品などでは、クライアントにソースコードを公開したくない場合もあるでしょう。今回は、PHPのソースコードをバイナリ/難読/暗号化する「Zend Guard」を紹介します。
Zend Guardは、PHPスクリプトに対してバイナリコードへ変換、難読化、暗号化を行える商用ソフトウェアです。PHPによって開発されたアプリケーションを商用製品として販売する場合や、ソースコード改ざんから保護したい場合など、セキュリティ面での強化をもたらします。
Zend Guardは、ソースコード保護のためにコードの難読化/暗号化/中間コード化を行います。中間コードはPHPスクリプトを実行コードに変換する途中結果であるため、インタープリタで発生する実行時コンパイルのオーバーヘッドを減少させる効果があります。
リスト1のソースコードを難読化/暗号化/中間コード化した例を図1〜3に示します。どれも可読なコードにはなっていませんが、レベルによって行われている処理は違います。Encoding Onlyの場合、最適化は行われますが難読化は行われず、単純にバイナリコードへ変換されるのみとなります。Basicの場合はローカル関数が難読化の対象に入ります。対象が1つのスクリプトファイル内で完結するため、異なるレベルでエンコードされたバイナリファイルを組み合わせて扱うことを想定しています。Strongの場合、関数のコール、クラス名、クラスのメソッド、ローカル変数も難読化の対象となり、最高レベルのセキュリティが保証されます。
<?php
set_include_path('./_/library/');
require_once 'config.php';
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('./_/application/controllers');
?>
なお、Encoding OnlyとBasicを使う場合はZend Optimizer 2.6以上、StrongはZend Optimizer 3.0以上の稼働するPHPランタイムをインストールする必要があります。
エンコードを行う手順は図4のようになります。プロジェクトを作成*した後、エンコード対象のファイルをインポートします。ディレクトリ階層が分かれているアプリケーションは、インポートすることでTargetのディレクトリへ出力されるようになります。その際、PHPスクリプト(*.php)以外のファイルも出力対象として含めることができますが、エンコード処理は行われません。
ウィザードで各種設定を行えるが、通常画面の右側に位置するタブで設定を変更することも可能。
Copyright © ITmedia, Inc. All Rights Reserved.