web-dev-qa-db-ja.com

WebページでJavaScriptコードを非表示にするにはどうすればよいですか?

ソースコードがブラウザのソース表示機能を介して表示されている場合、WebページのHTMLからJavascriptコードを隠すことは可能ですか?

コードを難読化することは可能ですが、ソース表示機能ではhiddenにすることをお勧めします。

78
arun nair

ブラウザの[ソースの表示]コマンドから表示されるコードであるあなたの質問に他の誰かが実際に直接回答したかどうかはわかりません。

他の人が言ったように、決まった視聴者からブラウザで実行することを意図したjavascriptを保護する方法はありません。ブラウザで実行できる場合は、決心した人も表示/実行できます。

ただし、javascriptを次の付属の外部javascriptファイルに配置すると、

<script type="text/javascript" src="http://mydomain.com/xxxx.js"></script>

タグを使用すると、[ソースの表示]コマンドでJavaScriptコードがすぐに表示されなくなります。そのように表示されるのはスクリプトタグ自体だけです。だからといって、誰かがその外部javascriptファイルを読み込んでそれを見ることができないというわけではありませんが、ブラウザの[ソースの表示]コマンドからファイルを除外する方法を尋ねました。

ソースを表示するためにより多くの作業を行いたい場合は、次のすべてを実行します。

  1. 外部の.jsファイルに入れます。
  2. ファイルを難読化して、ほとんどのネイティブ変数名を短いバージョンに置き換え、不要な空白をすべて削除して、それ以上の処理を行わなければ読み取れないようにします。
  3. プログラムでスクリプトタグを追加することにより、動的に.jsファイルを含めます(Googleアナリティクスのように)。クリックすると簡単なリンクがないため、[ソースの表示]コマンドからソースコードにアクセスするのがさらに難しくなります。
  4. ローカル処理を行うのではなく、ajax呼び出しを介して取得するサーバーに、保護したい興味深いロジックを配置します。

そうは言っても、パフォーマンス、信頼性、そしてアプリの改善に集中する必要があると思います。何らかのアルゴリズムを絶対に保護する必要がある場合は、それをサーバーに配置しますが、それ以外の場合は、秘密を保持することではなく、最善を尽くして競います。とにかく、それが最終的にWeb上で成功する仕組みです。

112
jfriend00

いいえ、できません。

ブラウザに渡さないと、ブラウザにはありません。

そうした場合、それ(または簡単に追跡できる参照)がソースの一部を形成します。

35
Quentin

Html Encrypterを使用します。

<link rel="stylesheet" href="styles/css.css" type="text/css" media="screen" />
<script type="text/javascript" src="script/js.js" language="javascript"></script>

copy and paste it to HTML Encrypter and the Result will goes like this
and paste it the location where you cut the above sample

<Script Language='Javascript'>
<!-- HTML Encryption provided by iWEBTOOL.com -->
<!--
document.write(unescape('%3C%6C%69%6E%6B%20%72%65%6C%3D%22%73%74%79%6C%65%73%68%65%65%74%22%20%68%72%65%66%3D%22%73%74%79%6C%65%73%2F%63%73%73%2E%63%73%73%22%20%74%79%70%65%3D%22%74%65%78%74%2F%63%73%73%22%20%6D%65%64%69%61%3D%22%73%63%72%65%65%6E%22%20%2F%3E%0A%3C%73%63%72%69%70%74%20%74%79%70%65%3D%22%74%65%78%74%2F%6A%61%76%61%73%63%72%69%70%74%22%20%73%72%63%3D%22%73%63%72%69%70%74%2F%6A%73%2E%6A%73%22%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%3C%2F%73%63%72%69%70%74%3E%0A'));
//-->

HTML ENCRYPTER 注:ページにJavaスクリプトがある場合は、.jsファイルにエクスポートして、上記の例のようにしてください。

また、このEncrypterは、あなたのウェブサイトを台無しにするコードで常に機能しているわけではありません... <form> </form>のように非表示にしたい最高の部分を選択してください

これは、事前のユーザーが逆にすることもできますが、私のようなnoobがすべて知っているわけではありません。

これが役立つことを願って

13
HINAYUPAKS

私の解決策は、最後のコメントから着想を得ています。これはinvisible.htmlのコードです

<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript" src="invisible_debut.js" ></script>
<body>
</body>

Invisible_debut.jsの明確なコードは次のとおりです。

$(document).ready(function () {
var ga = document.createElement("script"); //ga is to remember Google Analytics ;-)
ga.type = 'text/javascript';
ga.src = 'invisible.js';
ga.id = 'invisible';
document.body.appendChild(ga);
$('#invisible').remove();});

最後に、作成したスクリプトを削除していることに注意してください。 invisible.jsは次のとおりです。

$(document).ready(function(){
    alert('try to find in the source the js script which did this alert!');
    document.write('It disappeared, my dear!');});

invisible.jsはコンソールに表示されません。これは、JavaScriptによって作成されたため、ソースコードには削除されておらず、削除されていないためです。

Invisible_debut.jsに関しては、難読化しました。つまり、invisible.jsのURLを見つけるのは非常に複雑です。完璧ではありませんが、通常のハッカーにとっては十分なハードです。

11
Armand Arapian

'不可能です!'

ええ、そうです....

//------------------------------
function unloadJS(scriptName) {
  var head = document.getElementsByTagName('head').item(0);
  var js = document.getElementById(scriptName);
  js.parentNode.removeChild(js);
}


//----------------------
function unloadAllJS() {
  var jsArray = new Array();
  jsArray = document.getElementsByTagName('script');
  for (i = 0; i < jsArray.length; i++){
    if (jsArray[i].id){
      unloadJS(jsArray[i].id)
    }else{
      jsArray[i].parentNode.removeChild(jsArray[i]);
    }
  }      
}
7
Addinall

その情報を隠す方法があるかどうかはわかりません。 JavaScriptで実行していることを難読化または非表示にするために何を行っても、それを使用するためにブラウザーがそれをロードする必要があるという事実に変わりはありません。最新のブラウザには、スクリプトの抽出と表示を簡単にするWebデバッグ/分析ツールがすぐに使用できます(ヒットするだけです) F12 たとえば、Chromeで)。

ある種の企業秘密またはアルゴリズムを公開することが心配な場合、唯一の手段は、そのロジックをWebサービス呼び出しにカプセル化し、ページにAJAXを介してその機能を呼び出させることです。

7
Mark Carpenter

document.writeを使用できます。

jQueryなし

<!DOCTYPE html>
<html>
<head><meta charset=utf-8></head>
<body onload="document.write('<!doctype html><html><head><meta charset=utf-8></head><body><p>You cannot find this in the page source. (Your page needs to be in this document.write argument.)</p></body></html>');">
</body></html>

またはjQueryを使用

$(function () {
  document.write("<!doctype html><html><head><meta charset=utf-8></head><body><p>You cannot find this in the page source. (Your page needs to be in this document.write argument.)</p></body></html>")
});
5
Blue Sheep

ブラウザーのビューソースで特定のJavaScriptコードを非表示にする解決策を見つけたと思います。ただし、これを行うにはjQueryを使用する必要があります。

例えば:

あなたのindex.phpで

<head>
<script language = 'javascript' src = 'jquery.js'></script>
<script language = 'javascript' src = 'js.js'></script>
</head>

<body>
<a href = "javascript:void(null)" onclick = "loaddiv()">Click me.</a>

<div id = "content">
</div>

</body>

Js.jsファイルのjquery関数によって呼び出されるhtml/php本体のファイルをロードします。

js.js

function loaddiv()
{$('#content').load('content.php');}

ここにトリックがあります。

Content.phpファイルに別のヘッドタグを追加し、そこから別のjsファイルを呼び出します。

content.php

<head>
<script language = 'javascript' src = 'js2.js'></script>
</head>

<a href = "javascript:void(null)" onclick = "loaddiv2()">Click me too.</a>

<div id = "content2">
</div>

js2.jsファイルで、必要な関数を作成します。

例:

js2.js

function loaddiv2()
{$('#content2').load('content2.php');}

content2.php

<?php
echo "Test 2";
?>

リンクをたどり、jquery.jsのファイル名にコピーして貼り付けてください

http://dl.dropbox.com/u/36557803/jquery.js

これがお役に立てば幸いです。

5
Jepp

不可能です!

唯一の方法は、javascriptを難読化するか、javascriptを縮小することです。これにより、エンドユーザーはリバースエンジニアリングが困難になります。ただし、リバースエンジニアリングすることは不可能ではありません。

1