我可以检测到未加密的javascript(作为调试模式)

时间:2015-04-08 17:27:53

标签: javascript debugging detection bundling-and-minification

我希望在调试模式(未经编辑和非捆绑的脚本)中运行我的应用时提供其他控制台日志。有没有一种简单的方法可以在脚本中检测到这一点?

我正在考虑使用一个带有长参数名称的函数,然后获取该函数的字符串表示,检查该参数是否具有此长名称,或者在缩小期间是否更改为更短版本(因为minifiers会这样做)。

有更好,更简单的方法吗?

我想避免一种情况,即我将全局变量设置为特定值,然后忘记在部署期间重置它。我想要一些可以消除人为错误的防弹措施。

2 个答案:

答案 0 :(得分:0)

您检查一些源代码长度的想法是可行的。

但是,更传统的方法是将您的全局变量/环境配置外部化为您在开发/生产期间包含的单独文件:

  • env.js(用于制作)
  • env.dev.js(用于开发)

在开发中,您的应用程序默认包含env.dev.js.在缩小生产期间,您将包含env.js。

答案 1 :(得分:0)

缩小检测

正如问题所述,这是我一直在考虑的解决方案,并且工作做得很好。只要缩小算法还缩小了函数名称和参数,此检测将按预期工作。

window.debugging = (function detect(undefined) {
    // has function itself been renamed?
    if (!detect) return false;
    // has parameter been renamed?
    return /function\s\w+\((\w*)\)/i.exec(detect.toString())[1] === "undefined";
})();

并且它们具有在以下代码中使用的函数:

var debuglog = (function() {
    if (debugging === true)
    {
        return console.log;
    }
    return function() { return; };
})();

如果它只是一个函数,它也可以包含在原始检测函数中,因此它不会返回true / false,而是返回console.log重定向函数或无操作函数。