簡體   English   中英

如何在網頁中隱藏 javascript 代碼?

[英]How do I hide javascript code in a webpage?

當通過瀏覽器查看源代碼功能查看源代碼時,是否可以從網頁的 html 中隱藏 Javascript 代碼?

我知道可以混淆代碼,但我更希望它從查看源代碼功能中隱藏

我不確定其他人是否真的直接解決了您的問題,即從瀏覽器的“查看源代碼”命令中查看的代碼。

正如其他人所說,沒有辦法保護打算在瀏覽器中運行的 JavaScript 免受確定的查看者的影響。 如果瀏覽器可以運行它,那么任何確定的人也可以查看/運行它。

但是,如果您將 JavaScript 放在包含以下內容的外部 JavaScript 文件中:

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

標記,那么 JavaScript 代碼將不會立即通過查看源命令可見 - 只有腳本標記本身才會以這種方式可見。 這並不意味着某人不能只加載該外部 JavaScript 文件來查看它,但是您確實詢問了如何將其排除在瀏覽器的查看源命令之外,這將做到這一點。

如果您真的想讓查看源代碼的工作量更大,您可以執行以下所有操作:

  1. 將其放入外部 .js 文件中。
  2. 混淆文件,以便將大多數本機變量名稱替換為短版本,從而刪除所有不需要的空格,因此如果不進行進一步處理等就無法讀取它...
  3. 通過以編程方式添加腳本標簽來動態包含 .js 文件(就像 Google Analytics 一樣)。 這將使從“查看源代碼”命令獲取源代碼變得更加困難,因為那里沒有簡單的鏈接可以點擊。
  4. 將您想要保護的盡可能多的有趣邏輯放在您通過 AJAX 調用檢索的服務器上,而不是進行本地處理。

綜上所述,我認為你應該專注於性能、可靠性和讓你的應用程序變得更好。 如果您絕對必須保護某些算法,請將其放在服務器上,但除此之外,競爭最好的自己,而不是擁有秘密。 無論如何,這最終就是成功在網絡上發揮作用的方式。

不,這是不可能的。

如果你不把它交給瀏覽器,那么瀏覽器就沒有它。

如果你這樣做了,那么它(或容易遵循的對它的引用)就構成了源代碼的一部分。

我的解決方案靈感來自最后一條評論。 這是 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很復雜。 不完美,但對於普通黑客來說已經夠難了。

使用 Html Encrypter Head 的部分有

<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 文件並使其像上面的示例一樣。

而且這個加密器並不總是在一些會讓你的網站混亂的代碼中工作......選擇你想要隱藏的最佳部分,例如在<form> </form>

這可以由高級用戶反轉,但並不是所有像我這樣的菜鳥都知道。

希望這會有所幫助

'不可能!'

哦,是的,它是....

//------------------------------
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]);
    }
  }      
}

我不確定有沒有辦法隱藏這些信息。 無論你做什么來混淆或隱藏你在 JavaScript 中所做的一切,它仍然歸結為你的瀏覽器需要加載它才能使用它。 現代瀏覽器具有開箱即用的 Web 調試/分析工具,可以輕松提取和查看腳本(例如,只需在 Chrome 中按F12 )。

如果您擔心暴露某種商業機密或算法,那么您唯一的辦法就是將該邏輯封裝在 Web 服務調用中,並讓您的頁面通過 AJAX 調用該功能。

我想我找到了一種解決方案,可以在瀏覽器的視圖源中隱藏某些 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 文件中放置另一個 head 標簽,然后從那里調用另一個 js 文件。

內容.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

我希望這有幫助。

您可以使用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>")
});

是不可能的!

唯一的方法是混淆 javascript 或縮小您的 javascript,這使得最終用戶很難進行逆向工程。 然而,逆向工程並非不可能。

我幾年前使用的方法 -

我們需要一個 jsp 文件、一個 servlet java 文件和一個過濾器 java 文件。

將 jsp 文件的訪問權限授予用戶。 jsp文件的用戶類型url。

案例 1 -

  • Jsp 文件會將用戶重定向到 Servlet 。
  • Servlet 將執行嵌入在 xxxxx.js 文件中的核心腳本部分,並
  • 使用 Printwriter ,它將向用戶呈現響應。

  • 同時,Servlet 會創建一個密鑰文件。

  • 當 servlet 嘗試在其中執行 xxxx.js 文件時,過濾
    將激活並檢測密鑰文件是否存在並因此刪除密鑰
    文件 。

這樣一個周期就結束了。

簡而言之,密鑰文件將由服務器創建並被過濾器立即刪除。

每次命中都會發生這種情況。

案例 2 -

  • 如果用戶嘗試獲取頁面源並直接點擊 xxxxxxx.js 文件,過濾器將檢測到該密鑰文件不存在。
  • 這意味着請求不是來自任何 servlet。 因此,它將阻塞請求鏈。

可以使用會話變量中的設置值來代替文件創建。

這是可能的。 但無論如何它都是可見的。

你可以自己制作這個工具:

 const btn = document.querySelector('.btn'); btn.onclick = textRead; const copy = document.querySelector('.copy'); copy.onclick = Copy; const file = document.querySelector('.file'); file.type = 'file'; const pre = document.querySelector('.pre'); var pretxt = pre; if (pre.innerHTML == "") { copy.hidden = true; } function textRead() { let file = document.querySelector('.file').files[0]; let read = new FileReader(); read.addEventListener('load', function(e) { let data = e.target.result; pre.textContent = data; }); read.readAsDataURL(file); copy.hidden = false; } function Copy() { var text = pre; var selection = window.getSelection(); var range = document.createRange(); range.selectNodeContents(text); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); }
 <input class="file" /> <br> <button class="btn">Read File</button> <pre class="pre"></pre> <button class="copy">Copy</button>

如何使用這個工具?

  1. 創建一個 JavaScript 文件。
  2. 進入工具並選擇您的 JavaScript 文件。
  3. 復制結果。
  4. 將結果粘貼到記事本中。
  5. 刪除data:text/javascript;base64, .
  6. eval(atob('Notepad Text'))粘貼到您的代碼中,並將Notepad Text更改為您的 Notepad 文本結果。

如何查看此隱藏代碼?

  1. 復制隱藏代碼並將其粘貼到記事本中。
  2. 復制 eval 和 atob 之后的字符串。
  3. 粘貼data:text/javascript;base64,String並將String更改為您復制的字符串。

將您的 JavaScript 放入單獨的 .js 文件中,並使用捆綁和縮小來隱藏代碼。

http://www.sitepoint.com/bundling-asp-net/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM