V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imherer
V2EX  ›  程序员

vuex 里的数据能被很容易的伪造吗?

  •  
  •   imherer · 2019-04-24 10:40:22 +08:00 · 4242 次点击
    这是一个创建于 2025 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这东西毕竟是在前端,应该很容易被伪造和修改吧?是这样的吗?

    另外 vuex 里放几百 k 的数据经常更改和读取,性能上会有问题吗?
    24 条回复    2019-04-24 17:44:33 +08:00
    no1xsyzy
        1
    no1xsyzy  
       2019-04-24 10:45:44 +08:00   ❤️ 2
    是,前端的任何内容用户永远有最高控制权,即使是 “.exe ”,数据也可以被 Cheat Engine 修改。

    看优化,看你改了什么,但在 perf 前不要考虑任何性能问题。
    shintendo
        2
    shintendo  
       2019-04-24 10:50:21 +08:00
    不理解这个问题。
    你指的“伪造”,是被谁伪造?出于什么动机?
    imherer
        3
    imherer  
    OP
       2019-04-24 10:58:06 +08:00
    @shintendo 比如一个问答系统,总共 10 道题,用户只能做完第一道题才能做下一道题,假如把用户当前做到哪一道题了存在 vuex 的话,用户可以直接修改这个值直接跳到最后一道题。虽然实际中这个值应该在服务端计数。

    举的例子不一定准确,但是差不多就是这个意思
    shuax
        4
    shuax  
       2019-04-24 11:00:34 +08:00
    永远不信任前端
    xianxiaobo
        5
    xianxiaobo  
       2019-04-24 11:03:19 +08:00   ❤️ 2
    @imherer 伪造 vuex 数据多麻烦啊,直接调第 10 道题的接口就完事了。
    shintendo
        6
    shintendo  
       2019-04-24 11:04:53 +08:00
    @imherer
    直接 postman 发请求,网页都不要了
    ChefIsAwesome
        7
    ChefIsAwesome  
       2019-04-24 11:06:06 +08:00
    51job 曾经搞什么付费才能看隐藏内容的功能。就是前端拿个 div 遮了一下。
    hlwjia
        8
    hlwjia  
       2019-04-24 11:07:36 +08:00
    @imherer 按你的设计思路(后端是不是完全没有校验),直接调用接口改成绩得了
    Mutoo
        9
    Mutoo  
       2019-04-24 11:10:00 +08:00   ❤️ 1
    Vue 的组件可以直接通过 DOM Element 的 __vue__ 访问(即使是 production 也没问题),然后 .__vue__.$store 就暴露无疑了。
    imherer
        10
    imherer  
    OP
       2019-04-24 11:35:21 +08:00
    @xianxiaobo
    @shintendo
    @hlwjia

    这里只是假设了一个不恰当的例子……你们跑偏了……
    imherer
        11
    imherer  
    OP
       2019-04-24 11:35:51 +08:00
    @Mutoo 谢谢,刚还在想怎么看$store 里的数据呢
    wxsm
        12
    wxsm  
       2019-04-24 11:39:47 +08:00
    所有客户端数据都可以被伪造。
    npe
        13
    npe  
       2019-04-24 11:43:48 +08:00 via Android
    我伪造骗自己? 不把后端验证放到眼里?
    shintendo
        14
    shintendo  
       2019-04-24 13:20:58 +08:00
    @imherer
    不是,没有跑偏,表达的意思很清楚:任何页面上的限制,都可以通过不用页面直接调接口来绕过。
    所以不想让用户看的东西,就不能从接口上吐出来,一旦接口上吐出来了,就处于用户的完全掌控之下,你甚至不知道前端是不是一个浏览器。
    wa143825
        15
    wa143825  
       2019-04-24 13:29:46 +08:00
    @ChefIsAwesome 巧了,以前斗鱼也是
    tcpdump
        16
    tcpdump  
       2019-04-24 13:33:53 +08:00
    前后端分离就是这样,稍微改一下就能看到后台的所有功能。
    iiii
        17
    iiii  
       2019-04-24 13:42:36 +08:00 via Android
    @tcpdump 这个和分离有什么关系?
    zhenizhui
        18
    zhenizhui  
       2019-04-24 13:46:32 +08:00
    @tcpdump 也就只能看到页面,有啥用
    KuroNekoFan
        19
    KuroNekoFan  
       2019-04-24 14:18:00 +08:00
    感觉你问题描述的不清楚,如果害怕接口被无端调用,引入过期机制就好了
    Sapp
        20
    Sapp  
       2019-04-24 14:22:34 +08:00
    @imherer 然而你这个例子很贴切,前端能干的无非就两种,第一种自己骗自己,比如微博改文字玩。第二种就是绕过系统限制,就是你说的发请求,但是这两种都犯不着修改 vuex,图什么呢? 绕过系统限制那直接看 network 然后直接发不就行了吗?改基本 dom 更不需要 vuex。
    laimikan
        21
    laimikan  
       2019-04-24 15:36:05 +08:00
    所有暴露在前端的数据都可以直接修改
    lrh3321
        22
    lrh3321  
       2019-04-24 17:26:34 +08:00 via Android
    只要后端不去做限制,大不了伪造个请求。
    limuyan44
        23
    limuyan44  
       2019-04-24 17:40:03 +08:00 via Android
    这是 vue 的问题吗。。。。
    Phariel
        24
    Phariel  
       2019-04-24 17:44:33 +08:00 via iPhone   ❤️ 1
    前后端双重验证 看你怎么做了 这是老生常谈的问题
    PS:永远也不要信任用户提交的数据 做好完整验证
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2713 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:51 · PVG 20:51 · LAX 04:51 · JFK 07:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.