scriptB0y
V2EX  ›  问与答

js 向后端提交 ajax 请求,但是避免用户模拟 HTTP 上传虚假数据的思路?

  •  
  •   scriptB0y · Dec 26, 2018 · 3376 views
    This topic created in 2873 days ago, the information mentioned may be changed or developed.

    场景:

    JS 游戏在游戏结束后上传分数,但是如果用 HTTP 请求的话,用户可以随意 POST 一个分数。

    如果用 JS 加密,server 解密的话,用 Chrome 调试是否也可以随意改写一个值上传上去?

    12 replies  •  2018-12-26 13:48:38 +08:00
    ntdll
    ntdll
    Dec 26, 2018❤️1
    1
    原则上没有办法,只有记录客户端的行为数据,服务端判断是否可行。

    https://www.google.com/recaptcha/admin#list

    可以尝试 v3 版本的 reCaptcha,是完全无侵入性,而且国内可直接使用。
    ByZHkc3
    ByZHkc3
    Dec 26, 2018
    2
    这就是涉及到游戏反作弊的处理里,每次游戏生成一个游戏 id,可以在游戏中途上发数据,post 数据的时候可以依据游戏时间及分数上限来判断用户是否作弊
    nfroot
    nfroot
    Dec 26, 2018
    3
    用户端发来的任何数据都不可信任,都是可以伪造的,服务器端必须有机制去确认它合不合规,每隔一个时间发一个数据确认也是一个方式。


    但是。。。。客户端也可以伪造。


    所以重要的东西都是服务器去做运算而不是客户端。

    一般都是通过行为去判断。
    TomVista
    TomVista
    Dec 26, 2018
    4
    ```
    function(){
    ...
    }()
    ```
    GDC
    GDC
    Dec 26, 2018 via iPhone
    5
    无解,分数在服务端计算
    hongshaoyuancn
    hongshaoyuancn
    Dec 26, 2018
    6
    最近也在想 前端根据后端提供的密钥加上时间戳进行签名 保证签名唯一性的情况下 将数据带入后端校验唯一签名通过 其他的全部拒绝 准备试试呢。。。。。。。。。。
    maichael
    maichael
    Dec 26, 2018
    7
    @hongshaoyuancn #6 只要你前端能做的,别人也可以模拟这一过程。
    maichael
    maichael
    Dec 26, 2018❤️1
    8
    可以看下之前 LeanCloud 做小游戏的思路: https://zhuanlan.zhihu.com/p/52864161
    t6attack
    t6attack
    Dec 26, 2018
    9
    如果解密分析的难度过大,控制台破不了、抓包篡改数据破不了。。那我干脆用 CE 修改器直接改内存。
    Mazexal
    Mazexal
    Dec 26, 2018
    10
    想想之前微信跳一跳刷分数的, 直接通过接口更新直接就炸了
    scriptB0y
    scriptB0y
    OP
    Dec 26, 2018
    11
    @gam2046 这个我想过,跟你想法一样。客户端的游戏我用一种 hash 算法计算出得出:游戏时间、游戏操作 最后得到的游戏分数,然后客户端计算一个 hash 值带上。验证如 P 问题和 NP 问题一样,验证这个 hash 值很快。

    @hongshaoyuancn 客户端既然拿到了秘钥,那用户总看得见啊,大不了用浏览器把你的加密算法跑一下也是正确的。

    @Mazexal 微信是怎么做的呢?不暴露客户端代码 + 通过加密的 TCP 传输防止抓包?
    scriptB0y
    scriptB0y
    OP
    Dec 26, 2018
    12
    @maichael 谢谢 看了一下也是记录中途游戏参数+参数校验。这个摸透了校验规则也是可以伪造 “稍微高于正常水平”的游戏数据的,至于离线分析,也是看游戏数据是否合理吧。感觉没有本质上解决这个问题呢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2046 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 02:29 · PVG 10:29 · LAX 18:29 · JFK 21:29
    ♥ Do have faith in what you're doing.