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

lel*_*llo 13 html javascript

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

在网上搜索后,我发现这个解决方案在谷歌浏览器中运行良好,但在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 }
});
Run Code Online (Sandbox Code Playgroud)

是否有通用的方法来禁用从控制台调用函数?它取决于浏览器还是只是一个范围问题,或者是我忽略的其他东西?

Ber*_*rgi 16

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

不,没有:从不.嗯,显然,Facebook在谷歌Chrome中找到了一种方法:Facebook如何禁用浏览器的集成开发者工具? - 不过,我认为这是一个错误:-)

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

是.JavaScript在客户端执行,客户端具有完全的权限.他可以选择是否执行它,如何执行它并在执行之前按照自己的意愿修改它.现代开发人员工具允许用户在调试脚本时在任意范围内执行任意函数.

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

  • @KeoStrife:"facebook console"到底是什么意思,在https://www.facebook.com/上打开浏览器的devtools控制台?什么在那里不起作用?你使用什么浏览器,你输入了什么? (2认同)