[英]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.