フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

ワードプレス 有料プラグイン用に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」というトークンを示す定数が入り、そのコメント部分が二次元目の配列に格納される。なのでループ処理すればトークンを示す定数で判定して、処理を振り分けられるというわけだ。

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

コメント

  1. 2018/08/04(土) 00:03:54
    趣味丸出しの動画ですが、視聴・コメント・広告ありがとうございます。 今回はそんなに重いスクリプト使っていないので久しぶりにあびさん講座もやってます。参考になれば幸いです。 #sm33621767 https://t.co/iigGEnsGkr
  2. 2018/08/04(土) 00:03:54
    Disqus Wordpressプラグインのコメントスクリプトをブログ以外でロードさせない https://t.co/Lg8VSvszcp
  3. 2018/08/04(土) 00:03:54
    コメントがしっかり書かれているのを抜きにしても、module や class, メソッド, 変数名がそれぞれの役割をしっかり体現しているので、何をしたいスクリプトなのかが分かります。(勝手ながら心の師匠のお一人として崇めております。)
  4. 2018/08/04(土) 00:03:54
    【マイリスト】コメント自演スクリプト+使用例.aviutl https://t.co/WgXNPeRCIu #sm32355460
  5. 2018/08/16(木) 22:45:47
    こいつの書いたスクリプトコメントもついてないし分かりづらいな()

記事に戻る

コメントを残す