web-dev-qa-db-ja.com

コードを隠すためにPHPをコンパイルできますか?

技術よりも合法であるかなり重大な問題が浮上しましたが、より低コストの技術的な解決策を見つけたいと思っています。一部の国(名前は省略します)には、その国のサーバーにデータを保持する必要がある法律があります。バックエンドソフトウェアをデータベースから完全に分離することは不可能です。この国の政府はサーバーとサーバー上のすべてのデータに自由にアクセスし、国有またはスポンサーの競合他社に渡すことができます。

他の国のユーザーとは別に保持されているので、ユーザーデータについては心配していませんが、PHPサーバー上で広く開かれているコードが非常に心配です。

PHPコードを何らかの方法でコンパイルまたは難読化して、サーバーで引き続き実行できるが、コンパイルされたソフトウェアのように表示/編集/変更できないようにする方法はありますか?

それとも、Javaのようなコンパイル済みプログラミング言語に切り替える唯一の技術的なオプションですか?

編集:投稿を削除しないでください。それほど価値がないことは知っていますが、以下のJörgW Mittagの回答は非常に貴重です。おそらく、プログラミングの知識が豊富な人が私の質問を編集して、答えに合うようにできますか?ありがとうございました :)

3
Arthur Tarasov

PHPコードを何らかの方法でコンパイルまたは難読化して、サーバーで引き続き実行できるが、コンパイルされたソフトウェアのように表示/編集/変更できないようにする方法はありますか?

番号。

サーバーでコードを実行するには、CPUがコードを理解する必要があります。 CPUは人間よりもはるかに愚かです。 CPUがそれを理解できれば、人間も理解できます。人間がコードを理解できないようにすると、CPUも理解できなくなり、実行できなくなります。

ちなみに、現在存在するすべてのPHP実装(Zend Engine、HVVM、P8、Quercus、Phalanger、Peachpie、HippyVM、Tagua VM、JPHP、…)は、実際にPHPコード。

それとも、Javaのようなコンパイル済みプログラミング言語に切り替える唯一の技術的なオプションですか?

番号。

違いはありません。コードは、サーバーが理解できる形式でサーバー上になければなりません。しかし、人間もそれを理解することができます。

唯一の可能な解決策は、誰かがあなたのコードへのアクセスを取得できないことを確認することは…彼らにあなたのコードへのアクセスを与えないことです。本当に簡単です。

これを実現する最も簡単な方法は、コードをオンプレミスに保持し、厳重に管理されたサービスを介してのみコードへのアクセスを提供することです。たとえば、Googleはコードを秘密にしています。

コードを完全にエンドツーエンドで暗号化するのは、はるかに、はるかに困難でコストのかかる方法です。基本的に、厳密に制御されたサービスを介したアクセスのみを許可する不正開封防止の侵入不可能なブラックボックスとしてサーバーを提供します。ここでの秘訣は、ブラックボックスが実際にstays "black"であることを確認することです。これには、オペレーティングシステム、すべてのライブラリ、CPU、マザーボード、RAM、システム内のすべてのバスとI/Oチップなどを完全に制御する必要があります。

XBoxを覚えていますか?マイクロソフトは、暗号化モジュールからマスター暗号化キーを暗号化されていないバスを介してCPUに送信しました。そのような高速バスをスヌープできるハードウェアが存在しないため、これは大丈夫だと彼らは考えました。まあ、あなたが10000000 $オシロスコープとあなたの手に多くの時間を持っているなら、あなたはcan実際にそのバスをスヌープします、そしてそうなると、MITそのようなオシロスコープを発明しました、MIT学生は多くの時間を手にし、暗号解読の訓練を受けており、すべてでLinuxを実行するのが好きなので、XBoxのLinuxインストーラーを作成しました、これは、海賊版ゲームのインストーラーを作成するためにクラッカーによってリバースエンジニアリングされました。

ちなみに、「コンパイルされたプログラミング言語」というものはありません。コンパイルまたは解釈は、言語ではなく、コンパイラーまたはインタープリター(duh!)の特性です。彼らは完全に異なる抽象化レベルに住んでいます。英語が型付き言語である場合、「コンパイルされたプログラミング言語」という用語は型エラーになります。すべての言語はコンパイラで実装でき、すべての言語はインタプリタで実装できます。たとえば、現在存在するすべての主流のPHP、JavaScript、Python、およびRuby実装にはコンパイラがあります。逆に、C、C++、およびHaskell用のインタプリタがあります。

13
Jörg W Mittag

難読化することはできますが、完全に隠すことはできません。以前は、この難読化を実行するionCubeとZend Guardの両方を使用することを余儀なくされており、それらの間に大きな違いはありません。これらの製品は、PHPファイルをバイトコード(opcode)にプリコンパイルし、バイトコードのみを暗号化されたコンテナで出荷します。実行時に、ローダー(サーバーで有効にする必要があります)がバイトコードを復号化し、バイトコードを挿入します。メモリ。

このようなツールを使用すると、カジュアルなスヌーピングはブロックされますが、断固とした攻撃者は、コードが何をするのかを把握できます。ソースコードが含まれていないため(バイトコードのみ)、変更も困難になります。ただし、バイトコードを(なんらかの形式の)ソースコードに逆コンパイルすることは可能であり、オンラインでこれを行う商用ツールがあるようですが、私はそれらの経験がありません。

6
Joeri Sebrechts