如何从浏览器控制台禁用 JavaScript 函数调用?

新手上路,请多包涵

我正在使用 HTML/JavaScript 开发一个 Web 应用程序,我想阻止用户在他们的浏览器控制台中调用函数以避免作弊。所有这些函数都包含在一个名为 functions.js 的唯一文件中,该文件加载在 index.html 文件的头部。

在网上搜索后,我找到了这个解决方案,它在 Google Chrome 中运行良好,但在其他浏览器(如 Firefox)中效率低下:

 var _z = console;
Object.defineProperty( window, "console", {
    get : function(){if( _z._commandLineAPI ){ throw "Script execution not permitted" } return _z; },
    set : function(val){ _z = val }
});

有没有通用的方法来禁用从控制台调用的函数?它取决于浏览器还是只是范围界定问题或我忽略的其他问题?

原文由 user1922938 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

有没有通用的方法来禁用从控制台调用的函数?

不,没有:从不。嗯,显然,Facebook 在 Google Chrome 中找到了一种方法来做到这一点: Facebook 如何禁用浏览器的集成开发人员工具? - 不过,我会认为这是一个错误 :-)

这可能是我忽略的其他事情吗?

是的。 JavaScript 在客户端执行,客户端对它拥有全部权力。他可以选择是否执行,如何执行,执行前可以任意修改。现代开发人员工具允许用户在调试脚本时在任意范围内执行任意函数。

您可以通过避免在全局范围内公开您的方法以及混淆(缩小)源代码来使内省和使用(调用)您的代码变得更加困难。但是,永远不要相信客户。为避免作弊,您必须在服务器上执行所有关键任务。不要指望所有请求都来自您的 JavaScript 代码或浏览器;您将需要处理可能由某种机器人发出的任意请求。

原文由 Bergi 发布,翻译遵循 CC BY-SA 3.0 许可协议

与其消除对控制台的访问,不如编写 javascript 代码,使其不会污染全局命名空间。这将使从控制台或地址栏执行的代码更难(或者在简单的情况下几乎不可能)执行您的代码: https ://stackoverflow.com/a/1841941/1358220

同样值得注意的是,如果您有一些代码您希望用户无法编辑或执行,请将其移至服务器端并仅将结果公开给客户端。您目前正在尝试通过错误的编码决策来修复错误的设计设计。改进您的设计,实施将自行完成。

原文由 Bob Davies 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏