ホームページ >バックエンド開発 >PHPチュートリアル >PHP Screw でコードを保護する
PHP は文字通りのプログラミング言語です。PHP は変更後すぐに実行できるという利点を誰もが気に入っていますが、暗号化されていないプレーン テキストのプログラム コードには、Code で記述されたキーやパスワードなど、いくつかの欠点もあります。すべて見てください。
PHP で作成された多くの商用製品は、最終的に顧客のマシンに展開されるときに必然的にプログラム コードを暗号化する必要があります。現在、市販の暗号化ソフトウェアには Zend Guard (US$600) や PHP Encoder (US$199) などがあります。Zend Guard は以前から使用されており、プログラムが適切に記述されていれば、暗号化後の実行結果が変化することはほとんどありません。期待通りではありません。 Zend Guard の原理は、オペコードにコンパイルして暗号化し、実行中に PHP 拡張機能を介して動的に復号化することだと思います。復号化はすでに実行可能な PHP オペコードであるため、公式に主張されている高速化効果があります。私は PHP Encoder を使用したことがないので、それを推測することはできません。
今日は、非常にシンプルな暗号化メカニズムである PHP-Screw を紹介します。その方法は、専用の復号化関数を備えた拡張機能をコンパイルする必要があるのと同じで、その後、暗号化された PHP ファイルを PHP を通じて復号化して実行できます。拡大。ソースコードを見ると、実装方法は実際には非常に簡単です。つまり、エンコードされたデータの前に「PM9SCREW」という文字列があり、PHP ファイルをデコードする必要があるかどうかを判断します。 。
次のように、最新の PHP Screw ソース コードのコピーを GitHub から直接クローンします:
git clone https://github.com/Luavis/php-screw
最初のアクションは次のとおりです。パスワード ファイル (my_screw.h) を変更すると、後でこのパスワード ファイルに基づいて専用の PHP 拡張機能 .so ファイルがコンパイルされるため、自分でコンパイルした拡張機能を使用して、別のパスワードで暗号化された PHP を実行したい場合は成功しません。
cd php-screw
vim my_screw.h
ファイル内の pm9screw_mycryptkey 配列を編集します。ファイルの内容は次のとおりです。
short pm9screw_mycryptkey[] = { 11152, 368, 192, 1281, 62};変更後にアーカイブします。コンパイルする前に php5-dev をインストールするには、php -config、gcc パッケージを実行し、次のコマンドを実行します:
phpize
./configure --with-php-config= which php-config
make
画面は次のとおりです。
コンパイル済み so ファイルはモジュール ディレクトリに配置されます。php.ini にハングするだけです。
次に、専用の暗号化プログラムをコンパイルし、tools ディレクトリに切り替えて直接 make する必要があります:
cd tools
make
コンパイル後、screw 実行可能ファイルが生成され、それを通じて実行可能ファイルを作成できます。 PHP プログラムの場合、暗号化後、元の平文には次のように .screw 拡張子が付きます。
さらに、一部のネチズンは、APC でコンパイルと実行を分離する方法について議論しています。興味のある方は参照してください。 Niao の記事は「APC を使用して PHP コードを保護する」と同じです。ただし、その後の APC の新しいバージョンの PHP サポートは不十分で、たとえば、PHP 5.6 では代わりに Opcache を使用することが推奨されました。実際、PHP 7 で使用される Opcache では、ソース コードに opcache.file_cache などの暗い (ドキュメントに記載されていない) パラメータが表示されますが、残念ながら、この file_cache 関数は PHP 5.6 の Opcache バージョンでは使用できません。 file_cache を使用すると、実際にオペコードのコンパイルと実行を分離できます。このアプローチについては、中国本土の多くの記事で説明されています。
PHP 5.6 でオペコードのコンパイルと実行を本当に分離したい場合は、PHP 7 の Opcache ファイル キャッシュ機能を PHP 5.6 に移行するのは困難です。結局のところ、基盤となる Zend API は大幅に変更されているため、終了する必要があります。残念ですが、最初は PHP Screw を使用してブロックしてください。悪役ではなく紳士から守ります。また次回お会いしましょう。