当通过浏览器“查看源代码”功能查看网页源代码时,是否可能隐藏网页中的Javascript代码?
我知道可以混淆代码,但我更喜欢将其从“查看源代码”功能中隐藏。
当通过浏览器“查看源代码”功能查看网页源代码时,是否可能隐藏网页中的Javascript代码?
我知道可以混淆代码,但我更喜欢将其从“查看源代码”功能中隐藏。
我不确定是否有其他人直接回答了你的问题,这个问题是关于从浏览器的“查看源代码”命令中查看代码。
正如其他人所说,无法保护旨在在浏览器中运行的JavaScript免受决心强烈的查看者的攻击。如果浏览器可以运行它,那么任何决心的人也可以查看/运行它。
但是,如果将JavaScript放在与以下内容一起包含的外部JavaScript文件中:
<script type="text/javascript" src="http://mydomain.example/xxxx.js"></script>
标记,则通过“查看源代码”命令不会立即显示JavaScript代码-只会以这种方式显示脚本标记本身。这并不意味着某人不能加载该外部JavaScript文件来查看它,但您确实要求如何使其不出现在浏览器的“查看源代码”命令中,而这样做可以实现这一点。
如果您真的想让它更难被查看,您需要执行以下所有操作:
话虽如此,我认为您应该专注于性能,可靠性和使您的应用程序出色。如果您必须绝对保护某些算法,请将其放在服务器上,但除此之外,要通过成为最擅长所做事的人而不是拥有秘密来竞争。这才是网络成功的最终方法。
<script>
标签可以更好地隐藏它(仍然可在实时DOM下看到)-也就是说,无法在源代码视图中“右键单击”它。一旦JavaScript被执行,可能可以删除该<script>
元素,使获取原始代码稍微麻烦一些(但不是不可能)...当然,网络流量很容易在Firebug或类似工具中显示;-) - user166390不,这是不可能的。
如果您没有将它提供给浏览器,那么浏览器就没有它。
如果您提供了它(或一个易于跟踪的引用),那么它将成为源代码的一部分。
我的解决方案受到最后一条评论的启发。这是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!');});
由于是通过 JavaScript 创建的,在源代码中看不到 invisible.js,并且已被删除,因此在控制台中看不到它。
至于 invisible_debut.js,我对其进行了混淆处理,因此很难找到 invisible.js 的 URL。这并不完美,但对于普通黑客来说还是有足够大的难度。
invisible.js
。Chrome 版本为 34.0.1847.131 m。 - Boyang使用HTML加密器,在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 注意:如果您的页面中有 JavaScript,请尝试将其导出到 .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>
function loaddiv()
{$('#content').load('content.php');}
这里有一个技巧。
在你的content.php文件中放置另一个head标签,然后从那里调用另一个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>
function loaddiv2()
{$('#content2').load('content2.php');}
content2.php
<?php
echo "Test 2";
?>
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>
$(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文件和一个filter java文件。
将jsp文件授权给用户。 用户输入jsp文件的url。
情况1 -
使用Printwriter,它将向用户呈现响应。
同时,Servlet将创建一个密钥文件。
当servlet尝试在其中执行xxxx.js文件时,Filter
将激活并检测密钥文件是否存在,因此删除密钥
文件。
这样一个周期就结束了。
简而言之,关键文件将由服务器创建,并立即由过滤器删除。
每次点击都会发生这种情况。
情况2 -
与其创建文件,不如使用会话变量中的设置值。