プランセスSPHP・ハウツー難読化


  1. PHPソースの一部分だけを難読化することは可能ですか?
  2. PHPソースの冒頭にコメントタグ形式での著作権表示をしていますが、コメントの削除機能を使うと、この著作権表示まで消えてしまいます。どうすればいいですか?
  3. JavaScriptを難読化できますか?
  4. PHPアプリケーションのContent-typeが「text/html」以外の場合、設定方法はどのようにすべきですか? 注意するべきことは?
  5. 解読防止策として、「定義されているはずの関数の読み込みに失敗した場合はエラーページに飛ばす。」機能を利用している場合に、Referrer(解読行為を行っているサイトのURL)を取得できますか?
  6. ソース内の著作権表示(コメント)を削除されたくないという目的で使用したいのですが、そのためだけにPHPソース全体を難読化するのは、仰々しくて嫌です。何とかなりませんか?
  7. 外部ファイルを難読化し、かつ、その外部ファイルを読み込んでいるPHPファイルを難読化する場合に気をつけるべきことは?
  8. お客に納品する場合にドメインを限定させたいですが、ドメイン限定機能は事前に納品先のお客が利用するサイトのドメインを聞いておかなければならないということですか?

1.PHPソースの一部分だけを難読化することは可能ですか?
はい、可能です。「PHPソースの難読化II」というメニューを御利用ください。

2.PHPソースの冒頭にコメントタグ形式での著作権表示をしていますが、コメントの削除機能を使うと、この著作権表示まで消えてしまいます。どうすればいいですか?
3ステップ目(or 2ステップ目)の「著作権表示を編集削除できない機能」を活用していただくと問題が解決すると思われます。同じ内容の著作権表示を3ステップ目でご入力ください。コメント削除機能でお客様のオリジナルのソース内のコメントは一旦削除されますが、同じ内容の著作権表示が新たに追加され、かつ、この著作権表示が一文字でも編集削除されると動作しなくなりますので、機能強化にもなります。


  


3.JavaScriptを難読化できますか?
弊社の別商品であります「SHTML Professional版」(7,980円)を御利用になることにより可能です。プランセスSPHPでは、JavaScriptの難読化はできません。エンコードのアルゴリズムを「ベーシック強化版」もしくは「アドバンスド」にしていただきますと、HTML中のJavaScriptも難読化されているように見えますが、ブラウザのソースにはしっかりとそのまま現れますので、御注意ください。JavaScriptの難読化のためには、別商品(SHTML)が必要です。



  


4.PHPアプリケーションのContent-typeが「text/html」以外の場合、設定方法はどのようにすべきですか? 注意するべきことは?


  


5.解読防止策として、「定義されているはずの関数の読み込みに失敗した場合はエラーページに飛ばす。」機能を利用している場合に、Referrer(解読行為を行っているサイトのURL)を取得できますか?
解読行為を検出すると、お客様が設定されたURLの末尾に「?u=(サイトのURL)」もしくは「&u=(サイトのURL)」がパラメータとして付加された形でリダイレクトされます。

ex. http://www.sphp.jp/forbid_decrypt.php?u=http%3A//test.****.com/test/intval_crypted.php

ですから、$_GET["u"]がその怪しいサイトのURLになります。

なお、解読作業がlocalhostや127.0.0.1でされると、何の情報にもなりませんから、可能であれば、例えばドメイン限定機能などを併用していただくことを推奨します。特定のドメイン以外では動作しないようにできます。


  


6.ソース内の著作権表示(コメント)を削除されたくないという目的で使用したいのですが、そのためだけにPHPソース全体を難読化するのは、仰々しくて嫌です。何とかなりませんか?
プランセスSPHPはPHPソースの一部分のみを難読化する機能を備えています。「PHPソースの難読化II 」というメニューを御利用ください。その場合に、できるだけ、その難読化対象の部分だけ丸ごと削除してしまうとアプリケーション全体が動作しなくなるような重要な部分が望ましいです。そうでないと、難読化されている部分だけ根こそぎ削除されてしまって、著作権表示も削除されてしまう可能性が残ってしまいます。

その難読化した部分のみを外部ファイル化して、本体のPHPソースはすっきりさせることも多くの場合可能だと思いますが、必ず検証・テストするようにしてください。


  


7.外部ファイルを難読化し、かつ、その外部ファイルを読み込んでいるPHPファイルを難読化する場合に気をつけるべきことは?
「ライセンス管理及びお試し版(trial)提供のための補助機能」及び「コンテンツ保護のためのJavaScriptを追加する機能」の両方を、外部ファイル(ファイルA)とPHP本体(ファイルB)の両方で選択することは、
  • 実行速度
  • ファイルサイズ
の面から意味がありません。片方で必要十分です。

どちらのファイルでこれらの機能を選択するかですが、外部ファイルの場合、「PHPプログラムの実行のたびにクレジット表示を行う」や「数分後にタイムアウトさせる機能」「コンテンツ保護のためのJavaScriptを追加する機能」を選択すると、PHPプログラムの本体内のプログラムの書き方によっては「Warning: Cannot modify header information - headers already sent〜」というエラーが出ることがありますので(回避策はこちら)、可能であればPHP本体の方でこれらの機能を選択した方が無難です。


  


8.お客に納品する場合にドメインを限定させたいですが、ドメイン限定機能は事前に納品先のお客が利用するサイトのドメインを聞いておかなければならないということですか?
はい、そうなります。

事前に納品先に利用先ドメインを確認することが困難な場合は、工夫が必要になってくると思われます。一例ですが、auth.phpというPHPファイルを作成していただき、そこで適切なライセンス番号を入力した場合にのみ、アプリケーションが動作するのに必須なデータファイル(.hogehoge)がサーバ上に生成されるようにしておきます。この「.hogehoge」には、実行しているサーバのホスト名などの情報が暗号化された形で含まれるようにしておきます。

また、auth.phpをプランセスSPHPで難読化していただき、その際に実行日の制限が可能ですので、特定の日付以降はライセンス認証が不可にしていただきますと、ライセンスの不正利用防止に役立つはずです。

そして、各PHPプログラムにて、.hogehogeの中身をfile_get_contents関数などで読み込み、データをデコードして最初に登録したサイトで実行しているかのチェックを入れるようにします。もちろん、この認証ロジック部分は難読化しておいていただく必要があります。(そのロジック部分だけコメントアウトされると意味がありませんので、.hogehogeにはアプリの実行に必ず必要な関数・メソッドなども暗号化した状態で入れておくと良いでしょう。)

技術的な問題として、「.hogehoge」をauth.phpで生成させる場合は、そのディレクトリーに対して書き込み権限が必要になってくるということです。ですから、可能なら、ユーザーにWindowsアプリを配布していただき、そのアプリ(exeファイル。実行できる日付の制限を加えておきます。)内でサイト情報を入力してだき、そのWindowsアプリが暗号化済みの「.hogehoge」を生成されるような仕組みを検討していただいたほうが現実的かもしれません。(この方法の場合、生成されたそのファイルを所定のディレクトリーにFTPソフトなどで別途アップしていただくことになります。)

後者のWindowsアプリによるデータファイルの生成という方法に関心はお持ちだが、Windowsアプリの開発経験がないというお客様の場合には、費用はかなりの高額(約8万円〜)になりますが、サポートに御相談ください。