当通过浏览器查看源功能查看源代码时,是否可以从网页的html中隐藏Javascript代码?
我知道可以对代码进行模糊处理,但我希望它能够从视图源功能隐藏。
答案 0 :(得分:107)
我不确定其他人是否直接解决了您的问题,这是从浏览器的View Source命令中查看的代码。
正如其他人所说,没有办法保护打算在浏览器中运行的javascript来自确定的查看者。如果浏览器可以运行它,那么任何确定的人也可以查看/运行它。
但是,如果你把你的javascript放在一个随附的外部javascript文件中:
<script type="text/javascript" src="http://mydomain.com/xxxx.js"></script>
标签,然后使用“查看源”命令不会立即显示javascript代码 - 只有脚本标记本身才会以这种方式显示。这并不意味着有人不能只是加载外部javascript文件来查看它,但你确实问过如何将它保留在浏览器的View Source命令之外,这样就可以了。
如果您想真正让查看源代码更加有效,您可以执行以下所有操作:
尽管如此,我认为您应该专注于性能,可靠性并使您的应用程序变得更好。如果你绝对必须保护一些算法,把它放在服务器上,但除此之外,竞争你做的最好,而不是有秘密。无论如何,这最终是成功在网络上运作的方式。
答案 1 :(得分:35)
不,这是不可能的。
如果您没有将它提供给浏览器,那么浏览器就没有它。
如果你这样做,那么它(或一个容易遵循的引用)构成了源的一部分。
答案 2 :(得分:13)
使用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>
这可以通过提前用户反向,但不是像我这样的所有菜鸟都知道。
希望这会有所帮助
答案 3 :(得分:10)
我的解决方案受到最后评论的启发。这是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非常复杂。不完美,但对普通黑客来说很难。
答案 4 :(得分:7)
我不确定是否有办法隐藏这些信息。无论你做什么来混淆或隐藏你在JavaScript中做的任何事情,它仍然归结为你的浏览器需要加载它才能使用它。现代浏览器具有开箱即用的Web调试/分析工具,使得提取和查看脚本变得微不足道(例如,在Chrome中点击 F12 )。
如果您担心会暴露某种商业秘密或算法,那么您唯一的办法就是将该逻辑封装在Web服务调用中,让您的页面通过AJAX调用该功能。
答案 5 :(得分:6)
'不可能!'
哦,是的,它是......
//------------------------------
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]);
}
}
}
答案 6 :(得分:5)
您可以使用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>")
});
答案 7 :(得分:4)
我想我找到了一个隐藏浏览器视图源中某些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
我希望这会有所帮助。
答案 8 :(得分:1)
不可能!
唯一的方法是混淆javascript或缩小你的javascript,这使最终用户难以进行逆向工程。然而,逆向工程并非不可能。
答案 9 :(得分:1)
这是可能的。但无论如何它是可见的。
您可以自己制作此工具:
<div id="container"></div>
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
并将 data:text/javascript;base64,String
更改为您复制的字符串。答案 10 :(得分:0)
我几年前使用的方法-
我们需要一个jsp文件,一个servlet java文件和一个filter java文件。
将jsp文件授予用户访问权限。 jsp文件的用户类型网址。
案例1 -
使用Printwriter,它将响应呈现给用户。
同时,Servlet将创建一个密钥文件。
当servlet尝试在其中执行xxxx.js文件时,请过滤
将激活并检测到密钥文件存在,因此删除密钥
文件。
一个周期结束了。
简而言之,密钥文件将由服务器创建,并由filter立即删除。
每次点击都会发生这种情况。
案例2-
可以使用会话变量中的设置值代替文件创建。
答案 11 :(得分:-1)
将您的JavaScript放入单独的.js文件中,并使用捆绑和缩小功能混淆代码。