最終回:「ソースは明かせない……」――ソースコードをバイナリ/難読/暗号化する「Zend Framework」で加速するPHP開発(1/2 ページ)

PHPはスクリプト言語であるため、PHPでアプリケーションを作成して配布すると、ソースコードが読める状態になってしまいます。今回は、PHPのソースコードをバイナリ/難読/暗号化する「Zend Guard」を紹介します。

» 2007年03月12日 07時00分 公開
[杉田直哉,ITmedia]

 PHPはスクリプト言語であるため、PHPでアプリケーションを作成して配布すると、「オープンソースとして公開する/しない」という意図にかかわらず、ソースコードが読める状態になってしまいます。しかし、商用製品などでは、クライアントにソースコードを公開したくない場合もあるでしょう。今回は、PHPのソースコードをバイナリ/難読/暗号化する「Zend Guard」を紹介します。

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');
?>

リスト1 エンコードする前のソースコード
図1 図1 Obfuscation(難読化):Encoding Onlyの場合
図2 図2 Obfuscation(難読化):Basicの場合
図3 図3 Obfuscation(難読化):Strongの場合

 なお、Encoding OnlyとBasicを使う場合はZend Optimizer 2.6以上、StrongはZend Optimizer 3.0以上の稼働するPHPランタイムをインストールする必要があります。

 エンコードを行う手順は図4のようになります。プロジェクトを作成*した後、エンコード対象のファイルをインポートします。ディレクトリ階層が分かれているアプリケーションは、インポートすることでTargetのディレクトリへ出力されるようになります。その際、PHPスクリプト(*.php)以外のファイルも出力対象として含めることができますが、エンコード処理は行われません。

図4 図4 ソースコードを難読化/暗号化/中間コード化する手順(クリックで拡大)

このページで出てきた専門用語

プロジェクトを作成

ウィザードで各種設定を行えるが、通常画面の右側に位置するタブで設定を変更することも可能。


       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.