見ようと思えば見えてしまうので

【PHP TIPS】 80. PHPでJavaScriptを難読化

JavaScriptのプログラムを難読化するライブラリが紹介されています。ちょっと気になるのがこの部分。

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

http://itpro.nikkeibp.co.jp/article/COLUMN/20080415/299082/

難読化の言葉の通り、読むのが難しくなるだけで読めなくなるわけではないので、どうしても見られたくないコードはサーバサイドで実行するようにしないと危険かと。

記事の中で難読化後の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をちょっといじってみます。

javascript:alert(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,{})) 

先頭のevalをalertに変更。さらにブラウザのアドレスバーで実行するために先頭にjavascript:を追加しました。これをブラウザのアドレスバーにコピーして実行すると、難読化前の alert("Hello PHP!"); が表示されます(見やすいように改行を入れているので実際やる時は改行を外して下さい。)。

一手間かけさせることで読む気を減退させる効果はあるので、難読化の効果はあると思いますが、読めないことを前提にパスワードのような情報を埋め込んでしまうと痛い目を見ることになるので要注意ですね。