重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

javascriptソースを他の人に盗用されることを防止したいと思います。
完全に防止することはできないと思いますが、極力難読化することは可能かと思います。
防止対策としてお勧めの方法はないでしょうか?

お勧め方法を紹介して下さい。

例えば、CSSファイルなどはインポートさせた場合に存在しないインポート先URLを指定するとかちょっとした対策はあると思いますが・・・

A 回答 (4件)

> 完全に防止することはできないと思いますが、極力難読化することは可能かと思います。


盗用の完全防止ではなく、難読化することが目的ならば、
可能です。


・読みづらいコードを書く。
作者にさえわかりにくければ、読み手にもわかりにくいです。
現実的には、変数名や関数名が英数字の羅列というのはよくあります。

・改行とインデントを全て削除する
改行もインデントもなければ読みづらいのは言わずもがな。

・zipなどの圧縮アルゴリズムを応用して圧縮、実行時は解凍し、evalする。
a='alert';h='hoge';eval(a+'(¥''+h+'¥');');

・全ての文字を文字コードで記述し、実行時はfromCharCodeで復元。
メールアドレスの表示に使う暗号化アルゴリズムの一種。
アレンジすればウイルスに使われるほどファイルサイズを小さくしたり、
ファイルサイズを犠牲にして複雑な暗号アルゴリズムを組み立てることも可能。
基本的に原文からは推測出来ません。

> 例えば、CSSファイルなどはインポートさせた場合に
どこぞのアダルトサイトで使われてましたがインラインフレームの何重もの入れ子と
document.write('<script src=""></script>')の連鎖は、
解析する方としては面倒くさいことこの上ないので、難読化にはなりますがおすすめはしません。


インデント削除や圧縮アルゴリズムを応用するコンプレッサーは、フリーウェアにあります。
名前の通り、目的は難読化や暗号化ではなく、ファイルサイズ減少ですが、
きょうび、100kbや200kbは誤差の範囲ですし、難読化を目的として利用させてもらうにもちょうど良いツールと思います。

コンプレッサーで圧縮するのはコストパフォーマンスに優れていると思います。
複雑にすればするほど、解析も大変になってきます。
というよりも面倒くささにより解析させる気を失わせることを目的として、いくつかの圧縮・暗号パターンを組み合わせるのがもっとも効果的ではないでしょうか。

ただし、ある事を行ったり、ツールを使えば一目瞭然です。
これはどうしようもないです。

・HTMLやURLに深く依存し、下手なコードを書く。
これがベストだと思います。
解析するには最も面倒ですし、そんなコードは真似(盗用)したくないですしね。
コピーペーストするにも、HTMLに依存していればスクリプトのコピーだけでは利用出来ません。
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2008/01/18 18:44

どうしても・・・というなら、まぁ元も子もない意見ですが、そのスクリプトをすべてサーバサイドで動く言語に移植するのが一番確実でしょう。

そして必要に応じてAJAXなどで呼び出し、実行結果のみを受け取って利用するわけです。

既に回答があるように、クライアントサイドである限り、スクリプトは隠せません。どうしてもというなら、サーバサイドを使うしかありません。
    • good
    • 1

>お勧めの方法はないでしょうか?


お勧めは、そんな大事なコードならUPしないことです。
画像の場合と同じ理由です。
しかし、専門家や熟練したJavaScriptのプログラマなら、
大抵の挙動は想像がつきます。あなたが持っている「すばら
しいコード」よりももっとエコノミーでクロスブラウザかつ
メモリリークのないスクリプトを書けるかもしれません。
クライアントサイドのスクリプトでどのような暗号化をした
ところで私は復元する自信があります。他のプログラマも
同様でしょう。
一番よいのは、あなたのコードをここに公開してもっとよい
設計思想はないかを検討してみることかな、と。
いやいや冗談です。
    • good
    • 0

無粋な突っ込みですが。



隠匿しなければならないような恥ソースなどは窓からぽいと捨てましょう。
もしくは第三者から完全に(物理的に)見れない状態にしましょう。
著作権を主張したいならば今はなきNetscapeに一日7回の礼拝を行うか
MoFoとMicrosoftに何かしらの貢献をしましょう。

まぁ冗談ですが。


>防止対策としてお勧めの方法はないでしょうか?
大抵はcryptなど復号化できる暗号を用いてソースそのものを暗号化し、
ページ表示時に復号→eval()といった流れになると思われます。
// ただ、javascriptをクライアントサイドで使用するという条件上それらは完全に無駄であり、
// 「クライアントに見せたくない」という謎の動機も首を傾げざるを得ません。

>例えば、CSSファイルなどはインポートさせた場合に存在しないインポート先URLを指定する(snip)
地球資源の無駄&サーバ管理者に迷惑なので止めましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!