[英]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 文件來查看它,但是您確實詢問了如何將其排除在瀏覽器的查看源命令之外,這將做到這一點。
如果您真的想讓查看源代碼的工作量更大,您可以執行以下所有操作:
綜上所述,我認為你應該專注於性能、可靠性和讓你的應用程序變得更好。 如果您絕對必須保護某些算法,請將其放在服務器上,但除此之外,競爭最好的自己,而不是擁有秘密。 無論如何,這最終就是成功在網絡上發揮作用的方式。
不,這是不可能的。
如果你不把它交給瀏覽器,那么瀏覽器就沒有它。
如果你這樣做了,那么它(或容易遵循的對它的引用)就構成了源代碼的一部分。
我的解決方案靈感來自最后一條評論。 這是 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 -
使用 Printwriter ,它將向用戶呈現響應。
同時,Servlet 會創建一個密鑰文件。
當 servlet 嘗試在其中執行 xxxx.js 文件時,過濾
將激活並檢測密鑰文件是否存在並因此刪除密鑰
文件 。
這樣一個周期就結束了。
簡而言之,密鑰文件將由服務器創建並被過濾器立即刪除。
每次命中都會發生這種情況。
案例 2 -
可以使用會話變量中的設置值來代替文件創建。
這是可能的。 但無論如何它都是可見的。
你可以自己制作這個工具:
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>
如何使用這個工具?
data:text/javascript;base64,
.eval(atob('Notepad Text'))
粘貼到您的代碼中,並將Notepad Text
更改為您的 Notepad 文本結果。如何查看此隱藏代碼?
data:text/javascript;base64,String
並將String
更改為您復制的字符串。將您的 JavaScript 放入單獨的 .js 文件中,並使用捆綁和縮小來隱藏代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.