为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕仙森 2018-08-01 18:28:08
写了一个js游戏,里面的变量涉及到速度等隐私数据,怎样写js可以保证不被开发者恶意修改?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

一般情况下未暴露到全局的变量都很难被修改。你可以考虑大量使用闭包来封装数据。从服务器获取数据的代码和获得的数据放在一个闭包中也是改不了的……但是仍有两种情况可以修改

  • 监听 Ajax 请求过程,可以使用某些工具直接修改 HTTP 的返回结果。虽然可以考虑对数据加密,但是由于解密程序在客户端而且没有编译成二进制,要解密并修改数据也还是可以做到的。

  • 直接进入开发者工具,在源文件上打断点,也是可以修改的……

所以,实际上目前是没有比较安全的办法。以后 WebAssembly 广泛之后可能会好一点。


查看完整回答
反对 回复 2018-08-06
?
慕斯王

TA贡献1864条经验 获得超2个赞

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

查看完整回答
反对 回复 2018-08-06
?
撒科打诨

TA贡献1934条经验 获得超2个赞

你在构建函数里写的变量如果不设在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的,构建函数里的letvarconst都无法在外面修改。


查看完整回答
反对 回复 2018-08-06
  • 3 回答
  • 0 关注
  • 1466 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信