【问题标题】:How to know if a function is called from the javascript console?如何知道是否从 javascript 控制台调用了函数?
【发布时间】:2013-03-04 01:28:33
【问题描述】:

我想知道我们如何在 javascript 控制台中隐藏一个函数,以使其无法被调用。

为了让您更好地理解问题,假设我有一个 javascript 函数,它使用 Ajax 在数据库中添加一些记录,其他任何人都可以从控制台使用此函数在数据库中添加任意数量的记录。我希望从 Web 应用程序而不是从控制台调用该函数...我试图混淆代码以隐藏它,但我们仍然可以从 Google Chrome javascript 控制台找到该函数。

【问题讨论】:

  • 您可以像您所做的那样进行混淆,但是不,您不能从客户端完全“隐藏”客户端功能(您可以使其安全,幂等等,但仅此而已在实现中,无关)。
  • 没办法,即使有可能,你仍然可以用浏览器或特定工具模拟请求。
  • 客户端没有 JavaScript 安全性。您需要在服务器上实施任何安全措施。
  • 如果无法全局/公开访问,您应该无法从控制台运行函数。那个功能在哪里?它可以像将所有内容包装在 IIFE 中一样简单。
  • 所有人所要做的就是查看您的 AJAX 调用通过网络发送的内容,并制作自己的 javascript 来发送该 ajax。你不能用默默无闻来阻止这种情况。

标签: javascript ajax function console hide


【解决方案1】:

无论您如何混淆和隐藏您的代码,任何可以在客户端执行的 javascript 都可以在控制台中执行,如果您愿意,您应该始终在服务器端运行权限/安全检查对此类功能的安全性进行任何实际控制。

话虽如此,您可以在立即调用的函数表达式中重构您的代码,该函数表达式不会像往常一样从控制台轻松调用:

(function() {
    var myUncallableFunction = function() { alert('meow'); }
})();

函数myUncallableFunction 只能在父函数内部调用,因为它是该父函数的局部变量,因此在其外部无法访问。

您仍然可以在该父级内部调用此函数,但如下所示:

(function() {
    var myUncallableFunction = function() { alert('meow'); }
    myUncallableFunction();
})();

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 2014-09-17
    • 2012-02-21
    • 2020-12-02
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    相关资源
    最近更新 更多