我正在使用 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 许可协议
不,没有:从不。嗯,显然,Facebook 在 Google Chrome 中找到了一种方法来做到这一点: Facebook 如何禁用浏览器的集成开发人员工具? - 不过,我会认为这是一个错误 :-)
是的。 JavaScript 在客户端执行,客户端对它拥有全部权力。他可以选择是否执行,如何执行,执行前可以任意修改。现代开发人员工具允许用户在调试脚本时在任意范围内执行任意函数。
您可以通过避免在全局范围内公开您的方法以及混淆(缩小)源代码来使内省和使用(调用)您的代码变得更加困难。但是,永远不要相信客户。为避免作弊,您必须在服务器上执行所有关键任务。不要指望所有请求都来自您的 JavaScript 代码或浏览器;您将需要处理可能由某种机器人发出的任意请求。