みなさんPHPのプログラムを書くのがメインだと思いますが、最近JavaScriptを書く機会が増えたのではないでしょうか?

それも、HTML内に記述するタイプではなく、Webアプリケーションとして使うような大きなものを作られることもあるでしょう。

それらの外部ファイル化したJavaScriptはブラウザからjsファイルにアクセスされれば簡単にソースコードを見られてしまい、お困りの場合もあるのではないでしょうか。今回は、PHPでJavaScriptを難読化する方法をご紹介します。

今回、ご紹介するのは「JavaScriptPacker」というPHP4/5対応のPHPライブラリでライセンスはLGPLとなっています。

このライブラリはもともと.NET用で作られたものをPHP用に書き直されたものだそうです。他にも、perl版やwsh版があります。

それでは、早速使ってみましょう。

http://joliclic.free.fr/php/javascript-packer/en/から「packer.php-1.0.zip」をダウンロード・解凍しサーバにアップして下さい。

まずは、実際にどのような難読化をしてくれるのかを確認してみましょう。解凍した中に含まれるサンプルのexample-inline.phpにブラウザでアクセスしてみてください。

テキストボックス内にJavaScriptを書いて「Pack」ボタンを押すと、下に難読化されたScriptが表示されます。

難読化前のJavaScript
alert("Hello PHP!");
難読化後のJavaScript

eval(function(p,a,c,k,e,d){e=function(c){return
c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return
d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new
RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0("1
2!");',3,3,'alert|Hello|PHP'.split('|'),0,{}))

このように、難読化された後はまったく、わけがわからなくなります。実際に使用する場合は、以下のようなスクリプトになります。

難読化前のJavaScriptファイルです。

■sample.js

function sampleFunction() {
    alert("PHP!!");
}

そして、htmlファイルから読み込むscriptのsrc指定先を、難読化をするために作成したphpにします。

■sample.html

<html>
<head>
<!-- <script type="text/javascript" src="sample.js"></script> これが元
ファイル -->
<script type="text/javascript" src="jspacker.php"></script><!-- 難読化の
PHPファイルを指定 -->
</head>
<body>
    <h1>難読化ファイル読み込みサンプル</h1>
    <input type="button" onclick="sampleFunction()" value="クリック" />
</body>
</html>

難読化するのは以下のようにすごく簡単にできます。

■jspacker.php

<?php
require_once 'class.JavaScriptPacker.php';
//require_once 'class.JavaScriptPacker.php4'; //PHP4用

$src "sample.js"//難読化するJavaScriptファイル
$script file_get_contents($src);
$packer = new JavaScriptPacker($script);
$packed $packer->pack();
echo 
$packed;
exit;
?>

これで、難読化完成です。

実際の運用時には難読化の為に変換を毎回行うのではなく、同梱されているexample-file.phpのように、難読化したjsファイルを作成してそれを読み込んで使うことになるでしょう。

若干JavaScriptのパフォーマンスにも影響が出てはきますが、大きめのファイルで試したところそれほど問題になるようなレベルではありませんでした。

手軽に作成して使えるのがJavaScriptのいいところでもありますが、どうしてもユーザには見られたくないコードもあるでしょう。
そんなときには、是非このライブラリを使ってみて下さい。



(アシアル 中川善樹)


この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。