この記事はブロックされています。続きを読みたい方はログインをして下さい。会員ではない方は新規会員登録をして下さい。


ワードプレス 有料プラグイン用にPHPを難読化しよう サンプルコードあり

ワードプレスのプラグインに限らずPHPやJavaScriptといったスクリプト言語は、実行形式にコンパイルしないため納品後はソースコードが丸見えとなるよね。
分かる人がいじれば改造ができてしまう、という問題点が生じる。これはもう絶対的にしょうがないことなんだけれど、できる限り防ぎたいという場合はソースコード内のコメントを削除し、改行といった整形情報を削除するのが手っ取り早い。

さらに変数名を意味不明な文字列に置き換えたり、文字列をbase64でエンコードして暗号化すると難読化が高まる。
しかし、今回はワードプレスのプラグインという前提でいくので、変数の置き換えとbase64での暗号化はしない。
というのも、ワードプレスのプラグインは単独で動くものではなく、複数のプログラムが同時に動くため、ソースコードを置き換えたことによる変数名やクラス名の衝突が起きる可能性があるからだ。

PHPの暗号化といっても限界があって、分かる人には分かってしまうし、暗号化を復号化できるレベルの人は、他人のプログラムを改変するより自分で一から組み込んでしまうだろうし、分からない人はソースコード内にコメントがあろうと、整形されてなかろうと分からないものは分からない。

なので、コメントと改行の削除だけでいいだろう。
削除するコメントは「//」と「#」と「/* */」となる。
で、ひとつだけ問題があって、ワードプレスのプラグインは文頭に「//」で始まるプラグイン情報を記述することで認識させているので、変換したあとはその情報が消えてしまう。
例えばこんな感じで書かれている。

/*
Plugin Name: point members
Plugin URI: http://lesson-shool.com/
Description: ポイントメンバーズはポイントで記事が読める会員制ポイントサイトを作ることができます。メルマガ、ステップメール、新着メール、定期送信メール機能があります。
Version: 1.2.4
Author: Million High School
Author URI: http://lesson-shool.com/
*/

そこで、変換後には消えた部分を別途コピペしてあげる必要がある。
簡単にスクリプトの説明だけれど、PHPには「token_get_all()」という関数があって、引数に読み込んだソースコードを指定すると、ソースコードをトークンで分割して、二次元配列として返してくれる。
トークンというのは文法という意味だ。

例えば、文頭にコメントがあれば配列には「T_COMMENT」というトークンを示す定数が入り、そのコメント部分が二次元目の配列に格納される。なのでループ処理すればトークンを示す定数で判定して、処理を振り分けられるというわけだ。

実際のスクリプトとデモを紹介しよう。

関連記事