【问题标题】:How can I hide or encrypt JavaScript code? [duplicate]如何隐藏或加密 JavaScript 代码? [复制]
【发布时间】:2010-11-04 10:58:05
【问题描述】:

是否有任何方法可以隐藏或加密 JavaScript 代码以防止人们查看、复制和/或修改专有程序?

【问题讨论】:

标签: javascript encryption obfuscation


【解决方案1】:

你可以混淆它,但没有办法完全保护它。

示例混淆器: https://obfuscator.io

【讨论】:

  • 它工作正常并且默认选项不返回错误。谢谢!
  • 使用 Encode.js : encodejs.devincity.com
  • 您可以将其从源视图中完全隐藏,但使用 Chrome Inspector 或其他工具的一些高级知识将可以看到它。
  • 如果我将 YouTube 视频 URL 保存在变量中,并且在用户输入正确的密码后,该 URL 将进入 Iframe。问题是它会保护源代码中的 youtube url 以及 chrome 检查器。我希望用户只能在我的网站上看到视频而无法复制网址?但我想用 JavaScript 或 PHP 做到这一点
【解决方案2】:

不,这是不可能的。如果它在客户端浏览器上运行,则必须由客户端浏览器下载。使用 Fiddler 检查 HTTP 会话并获取任何下载的 js 文件非常简单。

您可以使用一些技巧。最明显的方法之一是使用 javascript 混淆器。

再一次,混淆只能防止随意窥探,并不能防止人们举起和使用您的代码。

您可以尝试以 Flash 电影形式编译的动作脚本。

【讨论】:

    【解决方案3】:

    虽然每个人都会普遍同意 Javascript 加密是 bad idea,但在一些小用例中,减缓攻击总比没有好。 你可以从YUI Compressor(正如@Ben Alpert 所说)开始,或者JSMin、Uglify 等等。

    但是,我想要真正“隐藏内容”的主要情况是发布电子邮件地址时。请注意,当您单击“检查元素”时,Chrome 会出现问题。它将显示您的原始代码:每次。这就是为什么混淆通常被认为是一种更好的方法。

    就此而言,我采取了两管齐下的攻击,纯粹是为了减缓垃圾邮件机器人的速度。我混淆/缩小 js,然后通过编码器再次运行它(同样,这第二步在 chrome 中完全没有意义)。

    虽然不完全是纯 Javascript 编码器,但我发现最好的 html 编码器是 http://hivelogic.com/enkoder/。它会变成这样:

    <script type="text/javascript">
    //<![CDATA[
    <!--
    var c=function(e) { var m="mail" + "to:webmaster";var a="somedomain"; e.href = m+"@"+a+".com";  
    };
    //-->
    //]]>
    </script>
    <a href="#" onclick="return c(this);"><img src="images/email.png" /></a>
    

    进入这个:

    <script type="text/javascript">
    //<![CDATA[
    <!--
    var x="function f(x){var i,o=\"\",ol=x.length,l=ol;while(x.charCodeAt(l/13)!" +
    "=50){try{x+=x;l+=l;}catch(e){}}for(i=l-1;i>=0;i--){o+=x.charAt(i);}return o" +
    ".substr(0,ol);}f(\")87,\\\"meozp?410\\\\=220\\\\s-dvwggd130\\\\#-2o,V_PY420" +
    "\\\\I\\\\\\\\_V[\\\\\\\\620\\\\o710\\\\RB\\\\\\\\610\\\\JAB620\\\\720\\\\n\\"+
    "\\{530\\\\410\\\\WJJU010\\\\|>snnn|j5J(771\\\\p{}saa-.W)+T:``vk\\\"\\\\`<02" +
    "0\\\\!610\\\\'Dr\\\\010\\\\630\\\\400\\\\620\\\\700\\\\\\\\\\\\N730\\\\,530" +
    "\\\\2S16EF600\\\\;420\\\\9ZNONO1200\\\\/000\\\\`'7400\\\\%n\\\\!010\\\\hpr\\"+
    "\\= -cn720\\\\a(ce230\\\\500\\\\f730\\\\i,`200\\\\630\\\\[YIR720\\\\]720\\\\"+
    "r\\\\720\\\\h][P]@JHADY310\\\\t230\\\\G500\\\\VBT230\\\\200\\\\Clxhh{tzra/{" +
    "g0M0$./Pgche%Z8i#p`v^600\\\\\\\\\\\\R730\\\\Q620\\\\030\\\\730\\\\100\\\\72" +
    "0\\\\530\\\\700\\\\720\\\\M410\\\\N730\\\\r\\\\530\\\\400\\\\4420\\\\8OM771" +
    "\\\\`4400\\\\$010\\\\t\\\\120\\\\230\\\\r\\\\610\\\\310\\\\530\\\\e~o120\\\\"+
    "RfJjn\\\\020\\\\lZ\\\\\\\\CZEWCV771\\\\v5lnqf2R1ox771\\\\p\\\"\\\\tr\\\\220" +
    "\\\\310\\\\420\\\\600\\\\OSG300\\\\700\\\\410\\\\320\\\\410\\\\120\\\\620\\" +
    "\\q)5<: 0>+\\\"(f};o nruter};))++y(^)i(tAedoCrahc.x(edoCrahCmorf.gnirtS=+o;" +
    "721=%y;++y)87<i(fi{)++i;l<i;0=i(rof;htgnel.x=l,\\\"\\\"=o,i rav{)y,x(f noit" +
    "cnuf\")"                                                                     ;
    while(x=eval(x));
    //-->
    //]]>
    </script>
    

    也许这足以减缓一些垃圾邮件机器人的速度。我还没有收到任何垃圾邮件(!还)。

    【讨论】:

    • 另一种选择是cloakedjs.com,它可以混淆、加密并添加调试预防和域锁定。仍然不是 100% 安全……但话又说回来,它在浏览器中。
    【解决方案4】:

    最好的压缩器之一(不是专门的混淆器)是YUI Compressor

    【讨论】:

    • 提供的链接无效
    【解决方案5】:

    JavaScript 是一种脚本语言,因此在 JavaScript 运行时解释和执行它之前一直保持人类可读的形式。

    至少对技术水平较低的人来说,部分隐藏它的唯一方法是混淆。

    混淆使人类更难阅读,但对精通技术的人来说并非不可能。

    【讨论】:

      【解决方案6】:

      保护您的代码的唯一安全方法是不泄露它。通过客户端部署,无法避免客户端访问代码。

      所以简短的回答是:你做不到

      更长的答案是考虑闪光灯或 Silverlight。虽然我相信 silverlight 会很乐意在客户端运行反射器时泄露它的秘密。

      我不确定 Flash 平台是否存在类似的东西。

      【讨论】:

        【解决方案7】:

        如果您有任何特别想要隐藏的内容(例如专有算法),请将其放在服务器上,或者将其放在 Flash 电影中并使用 JavaScript 调用它。编写 ActionScript 与编写 JavaScript 非常相似,您可以在 JavaScript 和 ActionScript 之间进行通信。你可以用 Silverlight 做同样的事情,但 Silverlight 没有 Flash 的渗透力。

        但是,请记住,任何手机都可以运行您的 JavaScript,但不能运行 Silverlight 或 Flash,因此如果您使用 Flash 或 Silverlight,您的移动用户将受到严重影响。

        【讨论】:

        • 以防万一有人看到这个并没有意识到它不再是 2009 年,请不要这样做。 Flash 和 Silverlight 现在几乎死了。
        猜你喜欢
        • 2017-03-02
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-10
        • 2011-07-07
        • 1970-01-01
        相关资源
        最近更新 更多