我正在开发一个 HTML/JavaScript 网络应用程序,我想阻止用户在他们的浏览器控制台中调用函数以避免作弊。所有这些函数都包含在一个名为 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 }
});
有没有通用的方法来禁用从控制台调用的函数?它是否取决于浏览器,或者它只是一个范围问题,还是我忽略的其他问题?
最佳答案
Is there a general way to disable functions call from console?
没有。没有:从不。好吧,显然,Facebook 在 Google Chrome 中找到了这样做的方法:How does Facebook disable the browser's integrated Developer Tools? - 不过,我认为这是一个错误 :-)
Is it maybe something else that I have ignored?
是的。 JavaScript 在客户端执行,客户端对它拥有全部权力。他可以选择是否执行,如何执行,执行前可以任意修改。现代开发人员工具允许用户在调试脚本时在任意范围内执行任意函数。
您可以避免在全局范围内公开您的方法,并混淆(缩小)源代码,从而使反省和使用(调用)您的代码变得更加困难。但是,永远不要相信客户。为避免作弊,您必须在服务器上执行所有关键任务。不要指望所有请求都来自您的 JavaScript 代码或浏览器;您还需要处理可能由某种机器人发出的任意请求。
关于javascript - 如何从浏览器控制台禁用 JavaScript 函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19235872/