有没有办法阻止 Firebug 在特定站点上工作?

Posted

技术标签:

【中文标题】有没有办法阻止 Firebug 在特定站点上工作?【英文标题】:Is there a way to stop Firebug from working on a particular site? 【发布时间】:2011-02-22 02:08:09 【问题描述】:

有什么方法可以让 Firebug 在网站上完全不能工作?

【问题讨论】:

你可以让你的网站看起来像一个萤火虫控制台,并希望用户感到困惑 如果您试图阻止他人查看或重复使用您的 javascript,请停止。 人们不应该仅仅因为他们不喜欢它的要求而否决这个问题。否决票是针对糟糕/无用的问题,而不是您不同意的问题。 当然,真正的问题显然是“我怎样才能阻止人们查看 .js 文件?” 我投了赞成票,因为这是一个很好的问题。知道答案是“不”的人越多,尝试的人就越少。 【参考方案1】:

我的声誉太低,无法发表评论,但我只想指出我在了解 window.history.pushState(); 后注意到的一些事情似乎您可以更改地址栏中当前的内容,一旦这样做,“查看页面源代码”将不起作用。因此,如果有办法阻止开发人员工具工作,我将不知道如何查看源代码。

编辑:使用 window.history.pushState() 后,当我查看开发人员工具时,它会告诉我重新加载页面以查看 javascript 文件中的内容(但它再次显示了 JS 文件的地址,所以这没有多大帮助)

【讨论】:

【参考方案2】:

只是为了提供一个我使用的小技巧可以帮助降低人们看到您的代码,

我所做的其中一个技巧不会阻止经验丰富的开发人员或黑客发现 JavaScript,但会阻止少数人使用 Firebug/inspector,

使用 jQuery 或其他带有格栅选择器的库

第二个调用端口是将所有文件放入加载程序文件 E.G

Loader.js

(function($)
    function loader(type, addr)
        var head = $("head")[0];
        switch(type)
            case "script":
                var element = $(document.createElement("script"));
                element.attr("type", "text/javascript");
                element.attr("src", addr);
                element.attr("loaded", "loader")
                $(head).append(element);
            
            case "style":
                var element = $(document.createElement("link"));
                element.attr("rel", "stylesheet");
                element.attr("type", "text/css");
                element.attr("loaded", "loader");
                element.attr("href", addr);
                $(head).append(element);
            
        
    

    loader("css", "path/to/your.css");
    loader("script", "path/to/script.js");

    loader("script", "unloader.js")
)(jQuery);

所以首先使用闭包来防止任何人使用检查器的控制台输入来查看已运行的代码。

所以一旦这个文件被传递,它将加载你的 CSS 和 JS,但你仍然可以在检查器的 head 元素中看到那里加载,这要归功于浏览器和它们的工作方式,你可以删除而不是卸载它们这意味着代码不会从执行中删除,但会阻止它们显示在检查器中,这就是卸载程序中的内容。

unloader.js

(function($)
    $("head *[loaded=loader]").remove();
)(jQuery);

以上将删除通过加载器加载的文件。

您唯一需要记住的是在包含加载程序的脚本中添加loaded="loader",现在这不会使某些人无法查看您的文件,但会阻止检查器在 html 中显示它们,

解决这个问题的方法可以是“查看源代码”查看加载程序文件并阅读它,因此请确保您最小化我使用 Google Closure Compiler (http://closure-compiler.appspot.com/home) 的代码/p>

即使这并不能阻止他们,只会让它变得更加困难。我测试过但未使用的步骤之一是在加载器上,您加载的文件使用 .HTAccess 规则检查它们是否有来自您的站点的引用链接,这将阻止他们直接浏览到您的 js/css 代码文件

另一个提示不要将它们存储在正常位置,并且不要在 /scripts/ 中使用通用名称 E.G 脚本 /style/ 中的 CSS 或 style.css

这里是一个加载器闭包编译然后混淆的例子

Loader.js

var _0xc596=["\x68\x65\x61\x64","\x73\x63\x72\x69\x70\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x79\x70\x65","\x74\x65\x78\x74\x2F\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74","\x61\x74\x74\x72","\x73\x72\x63","\x6C\x6F\x61\x64\x65\x64","\x6C\x6F\x61\x64\x65\x72","\x61\x70\x70\x65\x6E\x64","\x6C\x69\x6E\x6B","\x72\x65\x6C","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x74\x65\x78\x74\x2F\x63\x73\x73","\x68\x72\x65\x66","\x73\x74\x79\x6C\x65","\x63\x73\x73","\x70\x61\x74\x68\x2F\x74\x6F\x2F\x79\x6F\x75\x72\x2E\x63\x73\x73","\x70\x61\x74\x68\x2F\x74\x6F\x2F\x73\x63\x72\x69\x70\x74\x2E\x6A\x73","\x75\x6E\x6C\x6F\x61\x64\x65\x72\x2E\x6A\x73"];(function (_0x76e5x1)function _0x76e5x2(_0x76e5x2,_0x76e5x3)var _0x76e5x4=_0x76e5x1(_0xc596[0])[0];switch(_0x76e5x2)case _0xc596[1]:var _0x76e5x5=_0x76e5x1(document[_0xc596[2]](_0xc596[1]));_0x76e5x5[_0xc596[5]](_0xc596[3],_0xc596[4]);_0x76e5x5[_0xc596[5]](_0xc596[6],_0x76e5x3);_0x76e5x5[_0xc596[5]](_0xc596[7],_0xc596[8]);_0x76e5x1(_0x76e5x4)[_0xc596[9]](_0x76e5x5);;case _0xc596[15]:_0x76e5x5=_0x76e5x1(document[_0xc596[2]](_0xc596[10]));_0x76e5x5[_0xc596[5]](_0xc596[11],_0xc596[12]);_0x76e5x5[_0xc596[5]](_0xc596[3],_0xc596[13]);_0x76e5x5[_0xc596[5]](_0xc596[7],_0xc596[8]);_0x76e5x5[_0xc596[5]](_0xc596[14],_0x76e5x3);_0x76e5x1(_0x76e5x4)[_0xc596[9]](_0x76e5x5);; ; ;_0x76e5x2(_0xc596[16],_0xc596[17]);_0x76e5x2(_0xc596[1],_0xc596[18]);_0x76e5x2(_0xc596[1],_0xc596[19]); )(jQuery);

unloader.js

var _0xc2fb=["\x72\x65\x6D\x6F\x76\x65","\x68\x65\x61\x64\x20\x2A\x5B\x6C\x6F\x61\x64\x65\x64\x3D\x6C\x6F\x61\x64\x65\x72\x5D"];(function (_0x3db3x1)_0x3db3x1(_0xc2fb[1])[_0xc2fb[0]](); )(jQuery);

复制到:http://closure-compiler.appspot.com/home 将您的代码放在 // 在此处添加您的代码

然后使用返回的结果:http://www.javascriptobfuscator.com/Default.aspx 使其更加难以阅读。

希望这可以帮助任何希望使 JS 尽可能安全的人

但请记住,正如其他人所说,这不会阻止专业黑客,只会让阅读和理解变得非常困难

【讨论】:

在此之后,我决定在我的博客上发布完整指南,查看:blog.123torrentz.com/2012/06/…【参考方案3】:

您发送给客户端的任何内容,包括您的所有 javascript,都对您发送给的任何人开放。不要有任何你不想让人们看到的东西。没有办法阻止其他人的浏览器使用 Firebug 或许多其他工具来分析您的代码。您可以尝试让您的 html、css 和 javascript非常糟糕,这可能会减慢它们的速度!有一些混淆程序使其难以阅读。如果要隐藏功能,则需要在服务器上实现。

【讨论】:

【参考方案4】:

嗯…… 使用 Firefox(带或不带 Firebug)与此有什么关系?

我使用 IE,我可以很容易地查看您的 JavaScript。谷歌浏览器也是如此。见鬼,我可以在我的 Palm Treo 上查看你的网页时下载你的 JavaScript。

任何可以直接从浏览器访问的内容都可以下载并在闲暇时进行分析。正如其他人所说(比我更好),在您的网站上运行的 JavaScript 应该被视为“开源”。寻找另一种方法(即在您的服务器上处理)或接受有人会入侵并查看它。

请注意,您的例程是否非常好(就他们对您的网页所做的而言)以至于用户会访问您的网站并立即说“嘿,这很酷,我想知道他们是怎么做到的?”如果没有,请不要担心 - 大多数人不会有足够的兴趣尝试查看您的 JavaScript。

您可以尝试缩小您的 JavaScript,但这并不是 100% 会阻止有决心的人。您可以尝试加密它,但我从未尝试过。或者在您的 JavaScript 文件中添加版权声明,这样至少其他人将无法在没有法律问题的情况下将您的作品冒充为您的作品。

【讨论】:

【参考方案5】:

“我的 javascript 例程”属于我工作的公司,我的公司希望我们开发的东西安全。

当“黑客”使用一种特定的调试工具时,您不会保护东西。尽量阻止他们使用终极黑客工具:“查看源代码”。

如果它在外面,它就在那里。 “安全”在这种情况下意味着不同的东西。这意味着即使在完全了解源代码的情况下,也可以使用难以理解的技术*来保护您拥有的任何重要数据。源代码本身不安全,也不需要。


*) “难以穿透” = 在合理的时间内难以颠覆,没有什么是 100% :)

【讨论】:

【参考方案6】:

如果您想对访问者隐藏您的 HTML/CSS/JavaScript,这是不可能的。即使不能使用 Firebug,也可以简单地查看 HTML 源代码。任何外部 JavaScript 和样式表都可以作为纯文本文件下载。由于 HTML、CSS 和 JavaScript 是 客户端 技术,它们以纯文本形式下载并由 Web 浏览器解释,因此理论上 不可能 隐藏您的代码。要使代码更难 理解,最好的办法就是混淆它。见Wikipedia。

【讨论】:

【参考方案7】:

如果你想保护你的代码,你可以尝试加密你的 javascript 源代码

google encrypt javascript source

【讨论】:

请注意,伪装成浏览器(可能使用 rhino)的人可能会破坏加密。 正确,它只会使它更难获得,但最终如果电脑可以显示/阅读/使用它,那么有人将能够复制它。【参考方案8】:

警告:极端邪恶。永远不要使用此代码。此外,它不会阻止足智多谋的人。

setTimeout(checkForFirebug, 100);
function checkForFirebug()

    if (window.console && window.console.firebug) 
      while(true);    //Firebug is enabled
    
    setTimeout(checkForFirebug, 100);

编辑:我想我会回答问题背后的真正问题。事实上,Javascript 是一种解释性语言,而解释器位于浏览器中。这使得提供既安全又可运行的 Javascript 实际上是不可能的。 HTML 和 CSS 也是如此。您可以做的最好的事情是缩小 Javascript 以使其不那么容易重用。如果有问题的公司真的想要“安全”的 Javascript,你只需要告诉他们这是不可能的。

【讨论】:

我不知道是+还是-这个级别的邪恶。 最简单的解决方法是在加载页面之前禁用 javascript。这实际上并不能保护您的代码,但它可能会激怒您的用户。所以像大多数邪恶的东西一样,它也很愚蠢。 另一种解决方法是在打开 Firebug 之前将 javascript:checkForFirebug=function() 放在 URL 栏中【参考方案9】:

不,当然不是。如果 Firebug 揭示了一些你必须阻止用户看到的东西,那么你就完全错误地解决了这个问题。我并不是想粗鲁或贬低,但试图阻止一个特定的程序以修复您的 Web 应用程序中的错误就像一桶蒸汽一样合乎逻辑。 Firebug 没有什么神奇的。我可以通过编写一些代码来做任何事情。话虽如此,您应该更加关注一个潜在的问题。

【讨论】:

我从来没有提到任何关于错误的事情,我的问题很简单直接。根本问题是我的公司要求我们开发的任何 JavaScript 代码都是安全的。 @William 无意冒犯,但是您的公司需要更好地掌握在这种情况下“安全”的含义。 你不能保护 Javascript,只能隐藏它。 @William 我不知道你对直截了当的定义是什么,但你的问题确实在尖叫还有更多的故事。现在我有一个问题。 Firebug 与 Javascript 的“安全性”有什么关系?【参考方案10】:

最终,不,因为他们机器上的浏览器(在本例中为 firefox)可以选择运行它想要运行的任何 javascript(例如 firebug)。您无法阻止用户将其与您的网站一起运行。

【讨论】:

【参考方案11】:

您可以使用 Flash、Silverlight 或 Java 开发您的网站。然后 Firebug 将仅限于显示您的基本 HTML。

我假设您担心使用 FireBug 进行逆向工程。

【讨论】:

不幸的是我做不到,我需要所有的东西都是 HTML。我开发的网站不属于我,而是属于我工作的公司,无论如何,谢谢。【参考方案12】:

没有。无论如何,没有人想要你的 javascript 例程。 :-)

如果您担心不安全的代码,您应该重写您的网站以确保安全,而不是试图隐藏其问题。

【讨论】:

“我的 javascript 例程”属于我工作的公司,我的公司希望我们开发的东西安全。无意冒犯你,但你的回复既无用又相当傲慢。 @William:告诉你的公司,如果他们想要“安全”的东西,他们不应该把它放在公共网页上。 我真诚地提出了一个有用的观点,即错误地追求“你的公司”,呃,无能的应用程序开发经理。但没有冒犯。 另外,我放了一张笑脸!【参考方案13】:

如果启用 Firebug 后您的网站性能受到影响,您可能需要显示警告,要求用户将其关闭。 You can easily detect if Firebug is enabled through JavaScript.

【讨论】:

+1,这可能是您的网站所能做的一切。此外,您可以尝试记录哪些用户启用了它,它是否会导致您的页面运行缓慢等。至少如果他们抱怨您可以说,“好吧,如果您像我们要求的那样关闭了 firebug。 ..”【参考方案14】:

没有……

【讨论】:

【参考方案15】:

您可以单击Off 按钮将其禁用。

或者您是否试图阻止您的用户运行它?如果是这样,祝你好运......

【讨论】:

以上是关于有没有办法阻止 Firebug 在特定站点上工作?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法阻止 Symfony2 为某些路径发送会话 cookie?

如何使用Stemmer或Lemmatizer来阻止特定的单词

跨站点脚本帮助?

有没有办法阻止我的 Razer 笔记本电脑随机进入睡眠模式? [关闭]

如何阻止特定的网站浏览器代理?

Android上有没有办法拦截来电/短信以阻止/取消阻止它?