js 向后端提交 ajax 请求,但是避免用户模拟 HTTP 上传虚假数据的思路? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scriptB0y
V2EX    问与答

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

  •  
  •   scriptB0y 2018 年 12 月 26 日 2742 次点击
    这是一个创建于 2578 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景:

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

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

    12 条回复    2018-12-26 13:48:38 +08:00
    gam2046
        1
    gam2046  
       2018 年 12 月 26 日   1
    原则上没有办法,只有记录客户端的行为数据,服务端判断是否可行。

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

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


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


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

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

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

    @Mazexal 微信是怎么做的呢?不暴露客户端代码 + 通过加密的 TCP 传输防止抓包?
    scriptB0y
        12
    scriptB0y  
    OP
       2018 年 12 月 26 日
    @maichael 谢谢 看了一下也是记录中途游戏参数+参数校验。这个摸透了校验规则也是可以伪造 “稍微高于正常水平”的游戏数据的,至于离线分析,也是看游戏数据是否合理吧。感觉没有本质上解决这个问题呢。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2734 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 50ms UTC 14:40 PVG 22:40 LAX 06:40 JFK 09:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86