猿问

写了一个js游戏,里面的变量涉及到速度等隐私数据,怎样写js可以保证不被开发者恶意修改?

写了一个js游戏,里面的变量涉及到速度等隐私数据,怎样写js可以保证不被开发者恶意修改?

慕仙森
浏览 1467回答 3
3回答

犯罪嫌疑人X

一般情况下未暴露到全局的变量都很难被修改。你可以考虑大量使用闭包来封装数据。从服务器获取数据的代码和获得的数据放在一个闭包中也是改不了的……但是仍有两种情况可以修改监听 Ajax 请求过程,可以使用某些工具直接修改 HTTP 的返回结果。虽然可以考虑对数据加密,但是由于解密程序在客户端而且没有编译成二进制,要解密并修改数据也还是可以做到的。直接进入开发者工具,在源文件上打断点,也是可以修改的……所以,实际上目前是没有比较安全的办法。以后 WebAssembly 广泛之后可能会好一点。

慕斯王

可以考虑js混淆,搜索关键字【js混淆】【反爬虫】,这样客户端比较难以找到你核心的数据。

撒科打诨

你在构建函数里写的变量如果不设在this上,就无法在外面修改,如下:class Vehicle {    constructor(type) {        this.type = type;                // private属性        let speed = 10;        this.getSpeed = () => speed;    }}const vehicle = new Vehicle('Test');vehicle.type = 'Hello' //=> 没问题vehicle.speed = 15; //=> 不会改构建函数里的`speed`vehicle.getSpeed(); //=> 10设在this的属性都是public的,构建函数里的let, var和const都无法在外面修改。
随时随地看视频慕课网APP
我要回答