V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
viator42
V2EX  ›  程序员

公司的商城 App 被人一分钱下单,不知道他是怎么办到的

  •  
  •   viator42 · 2016-09-27 13:10:26 +08:00 via Android · 19012 次点击
    这是一个创建于 3011 天前的主题,其中的信息可能已经有所发展或是发生改变。
    感觉是被修改二次打包了
    第 1 条附言  ·  2016-09-27 13:58:00 +08:00
    最大的问题还是商品的价格由客户端计算,原价减优惠券减积分得出最终的价格.服务端想校验也不知道商品应该是多少钱所以就变成这样了.还好数据量不大有人工校验订单
    求 App 名的就歇歇吧,看热闹的不嫌事大
    191 条回复    2017-06-07 20:33:59 +08:00
    1  2  
    nightv2
        1
    nightv2  
       2016-09-27 13:13:19 +08:00
    服务端没有验证?
    millson
        2
    millson  
       2016-09-27 13:13:57 +08:00
    服务器端不做验证吗?永远不要相信“用户输入”
    yonka
        3
    yonka  
       2016-09-27 13:13:58 +08:00
    无论几次打包都没区别吧。 这明明是服务端的锅...
    viator42
        4
    viator42  
    OP
       2016-09-27 13:13:59 +08:00 via Android
    @nightv2 验证什么
    kera0a
        5
    kera0a  
       2016-09-27 13:14:39 +08:00   ❤️ 4
    @viator42 验证什么???
    听到这个就感觉悬了
    strongcoder
        6
    strongcoder  
       2016-09-27 13:15:29 +08:00
    验证什么???
    听到这个就感觉悬了....
    viator42
        7
    viator42  
    OP
       2016-09-27 13:16:19 +08:00 via Android
    @yonka 提交订单的价格被写死了
    ma125125t
        8
    ma125125t  
       2016-09-27 13:16:37 +08:00
    验证什么???
    听到这个就感觉悬了....。。。
    wlzcool
        9
    wlzcool  
       2016-09-27 13:17:54 +08:00
    验证什么???
    听到这个就感觉悬了....
    bao3
        10
    bao3  
       2016-09-27 13:18:01 +08:00 via Android
    安全,一定要经过两次以上的验证。
    tscat
        11
    tscat  
       2016-09-27 13:18:16 +08:00 via iPhone
    服务器要校验一次订单信息吧。是用户改了 post 包目测
    ixiaozhi
        12
    ixiaozhi  
       2016-09-27 13:18:49 +08:00
    付款成功,服务器回调
    dantegg
        13
    dantegg  
       2016-09-27 13:19:20 +08:00
    服务端不验证订单信息?
    kouryu
        14
    kouryu  
       2016-09-27 13:19:40 +08:00 via iPhone
    喷了
    我知道的某个公司,不管搞啥都能被人 1 分钱下单或者 bug 价!
    gino86
        15
    gino86  
       2016-09-27 13:20:39 +08:00
    @viator42 数据写不写死没有关系,服务端验不验证数据输入有效性是关键。
    zhuangzhuang1988
        16
    zhuangzhuang1988  
       2016-09-27 13:22:29 +08:00
    服务器没验证呗, 和阿里巴巴的月饼一样
    Sunshow
        17
    Sunshow  
       2016-09-27 13:26:33 +08:00
    验证什么???
    听到这个就感觉悬了....
    HanSonJ
        18
    HanSonJ  
       2016-09-27 13:27:02 +08:00
    我只想问楼主什么公司
    killerv
        19
    killerv  
       2016-09-27 13:28:04 +08:00
    想起了上次那个在客户端生成订单的帖子……
    likai
        20
    likai  
       2016-09-27 13:28:39 +08:00
    验证什么???
    听到这个就感觉悬了....
    likai
        21
    likai  
       2016-09-27 13:29:04 +08:00
    lz 什么 APP.我也去下个单
    w99wen
        22
    w99wen  
       2016-09-27 13:30:34 +08:00
    订单信息加盐加时间戳算出 md5 然后再加盐再算一次 md5 ,得到的值作为 sign 值防篡改。
    要不被抓包了,看到了你订单的 url ,改下价格就下单,不是完蛋了。
    Felldeadbird
        23
    Felldeadbird  
       2016-09-27 13:31:33 +08:00
    服务端不验证用户购买商品的价格吗?
    APP 发送的是什么价格就是什么价格吗?
    w99wen
        24
    w99wen  
       2016-09-27 13:31:55 +08:00
    对了。楼主什么 app ?让我也研究一下啊。
    neoblackcap
        25
    neoblackcap  
       2016-09-27 13:32:21 +08:00
    服务端不校验商品价格,客户端生产订单,大概就是这几个问题
    how2code
        26
    how2code  
       2016-09-27 13:32:51 +08:00
    下面两条都能避免这个情况
    1. 从收款处(支付宝、微信)回调验证用户付款金额,不仅仅是判断付款是否成功
    2. 直接验证用户提交的订单信息;数据是可以伪造的
    jimyan
        27
    jimyan  
       2016-09-27 13:33:24 +08:00 via Android
    用的微擎?有个一分钱漏洞,可以网上查
    shijingshijing
        28
    shijingshijing  
       2016-09-27 13:34:25 +08:00
    我来引战:这就是让前端来写全套的后果! 23333333
    ersic
        29
    ersic  
       2016-09-27 13:35:35 +08:00
    @viator42 验证订单的金额和订单商品价格是否一致。
    blackfire
        30
    blackfire  
       2016-09-27 13:36:33 +08:00
    我只想问楼主什么公司?

    我本人是做 APP 的,跟后台商量接口的时候,凡是涉及到金额的问题,我对他们最大要求就是,永远不要高估用户的智商,永远不要低估用户的智商,永远不要相信我提交的数据。
    viator42
        31
    viator42  
    OP
       2016-09-27 13:36:34 +08:00
    @Felldeadbird 价格是客户端算好了传过去的,得加上一堆优惠什么的,后端思维清奇,说是这样减少服务器压力
    daolin
        32
    daolin  
       2016-09-27 13:37:45 +08:00 via iPhone
    一分钱漏洞,前段时间那个微擎微信系统有这个 bug
    chaichaichai
        33
    chaichaichai  
       2016-09-27 13:38:10 +08:00
    @viator42 23333 ,贵司的 app 叫什么名字
    jarlyyn
        34
    jarlyyn  
       2016-09-27 13:38:16 +08:00   ❤️ 4
    @viator42

    这样的后端可以开了……
    diefishfish
        35
    diefishfish  
       2016-09-27 13:38:39 +08:00 via Android
    现在玩 fd 的人真是越来越多了
    reus
        36
    reus  
       2016-09-27 13:38:41 +08:00
    @w99wen 客户端加盐有什么用?你会加,攻击者不会加?服务器端验证才是正解。
    4641585
        37
    4641585  
       2016-09-27 13:38:49 +08:00
    @shijingshijing

    这锅前端不背…

    后端校验不是常识吗…

    缺乏常识的锅(
    Ouyangan
        38
    Ouyangan  
       2016-09-27 13:39:18 +08:00
    很大可能是被篡改数据了 , 加签名验证吧
    reus
        39
    reus  
       2016-09-27 13:40:45 +08:00   ❤️ 1
    @viator42 不是减少服务器端压力,是他不用写验证代码了,减少了他的工作量。报告上司把他开了吧,这样的人只会害了贵司。
    Felldeadbird
        40
    Felldeadbird  
       2016-09-27 13:41:33 +08:00
    晕。。后端也太自信了。估计后端没做过啥项目吧。
    reus
        41
    reus  
       2016-09-27 13:42:23 +08:00
    @Ouyangan 难道攻击者不会自己签名?客户端来的数据没有什么篡改不篡改的,不信任就行了。
    w99wen
        42
    w99wen  
       2016-09-27 13:45:00 +08:00
    @reus 加盐为了不容易被暴力破解出 MD5 的原始信息。
    md5 得到的 sign 值是给服务端验证的。
    服务器验证是肯定要有的。
    shiny
        43
    shiny  
       2016-09-27 13:45:23 +08:00
    @viator42 这后端就敢相信客户端传来的一切了? 安全常识匮乏。「不要相信来自用户的任何输入」
    yangtukun1412
        44
    yangtukun1412  
       2016-09-27 13:50:13 +08:00
    @w99wen
    要么你需要把 salt 和请求一起发给服务器, 要么硬编码在客户端. 两种方法都是可以比较方便地篡改的. 客户端签名最多只能当做数据完整性校验.
    ck65
        45
    ck65  
       2016-09-27 13:52:11 +08:00
    前端带价格哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈这事竟然真能发生。
    9hills
        46
    9hills  
       2016-09-27 13:52:24 +08:00
    客户端不管是签名也好,加密也罢,都没有什么卵用。
    imn1
        47
    imn1  
       2016-09-27 13:52:40 +08:00
    既然后端这样说,就让他背锅吧
    kideny
        48
    kideny  
       2016-09-27 13:53:17 +08:00
    有些公司为了省人力成本,让前端来写后台。极度讨厌那些压榨剩余劳动力的公司,技术就应该专业化。
    imn1
        49
    imn1  
       2016-09-27 13:53:20 +08:00
    @imn1
    不能说背锅,是担责
    akira
        50
    akira  
       2016-09-27 13:54:48 +08:00
    不需要二次打包,抓取到你提交的数据直接修改就可以了。这样的后端需要调教调教啊。。
    Penton
        51
    Penton  
       2016-09-27 13:56:02 +08:00
    APP : U 购
    公司:济南靓萌服饰有限公司

    别问我怎么知道的
    akring
        52
    akring  
       2016-09-27 13:58:26 +08:00
    付款后服务器要检查订单金额和实际支付金额(微信,支付宝都有回调)的吧,安卓不说了, iOS 越狱设备改个参数分分钟的事情,毫无压力
    Felldeadbird
        53
    Felldeadbird  
       2016-09-27 13:58:59 +08:00
    @Penton 一大波 1 分钱订单正在路上。。。后端和 APP 估计等着被炒了。祈祷。。
    iamzhuyi
        54
    iamzhuyi  
       2016-09-27 13:59:27 +08:00
    @Penton fd 大法好 哈哈哈哈哈哈
    deepjia
        55
    deepjia  
       2016-09-27 14:00:26 +08:00 via iPhone
    真的应该开了……服务端验证是非编码人员都必须知道的最起码的常识啊
    BMW
        56
    BMW  
       2016-09-27 14:00:50 +08:00
    客户端计算价格。。。。。。。。。。。。。。。。。一万个问号 ❓
    FrankZhu
        57
    FrankZhu  
       2016-09-27 14:01:54 +08:00
    @Penton 确定不是来推广一波 233333
    viator42
        58
    viator42  
    OP
       2016-09-27 14:05:05 +08:00
    @Penton 大概知道你是怎么知道的了
    pubby
        59
    pubby  
       2016-09-27 14:05:05 +08:00 via Android
    @Felldeadbird 来吧,让那后端感受一下服务器压力
    tscat
        60
    tscat  
       2016-09-27 14:06:20 +08:00
    优惠券。。。服务器也有优惠券的数据啊
    hasbug
        61
    hasbug  
       2016-09-27 14:09:07 +08:00
    呃··
    sarices
        62
    sarices  
       2016-09-27 14:10:27 +08:00
    哈哈,谁设计的流程啊?客户端计算价格也是厉害,竟然后端不知道实际价格,难道数据都在前端啊,后端就存数据库?不能查询商品价格?不能查询优惠券?
    dbfox
        63
    dbfox  
       2016-09-27 14:14:04 +08:00
    干得漂亮,请问 app 名字是什么?
    MinonHeart
        64
    MinonHeart  
       2016-09-27 14:14:14 +08:00
    没改成负的价钱已经很给面子了
    ccloli
        65
    ccloli  
       2016-09-27 14:16:09 +08:00 via Android
    楼主还好,这边还见过某平台有人提交负数结果还成功了 23333
    keyfunc
        66
    keyfunc  
       2016-09-27 14:17:58 +08:00
    验证什么???
    听到这个就感觉悬了....
    viator42
        67
    viator42  
    OP
       2016-09-27 14:19:14 +08:00
    @sarices 后端基本就是个裸数据库,业务逻辑全都用函数和存储过程实现
    domty
        68
    domty  
       2016-09-27 14:20:13 +08:00
    @ccloli
    提交负数可能走不通第三方支付接口。支付宝允许支付的最低单位应该就是 1 分钱。
    ljy2010a
        69
    ljy2010a  
       2016-09-27 14:20:39 +08:00
    @viator42 验证什么
    听上去就很爽的样子
    huntzhan
        70
    huntzhan  
       2016-09-27 14:23:10 +08:00
    ......有点厉害
    yanyandenuonuo
        71
    yanyandenuonuo  
       2016-09-27 14:29:19 +08:00
    贵司还招后端么,会验证价格的那种 :)
    reHuo
        72
    reHuo  
       2016-09-27 14:31:38 +08:00
    服务器停了
    alamaya
        73
    alamaya  
       2016-09-27 14:32:38 +08:00
    你这是前端把后端的事儿也做了?
    这设计得就有问题
    imbahom
        74
    imbahom  
       2016-09-27 14:37:44 +08:00   ❤️ 1
    不需要验证, 1 分钱下单的人是要被开除的!
    daysv
        75
    daysv  
       2016-09-27 14:38:19 +08:00
    好久没见过这么好笑的笑话了
    rphoho
        76
    rphoho  
       2016-09-27 14:41:41 +08:00
    拦到数据改完再提交吗,比如 burpsuite 之类的。
    fwings260
        77
    fwings260  
       2016-09-27 14:42:01 +08:00
    我又想起了之前做输入框
    公司几个人嚷嚷着让我在前端验证的事情了。。。
    VYSE
        78
    VYSE  
       2016-09-27 14:48:56 +08:00
    楼主,万一信息暴露到某吧,你们的人工审核就不干了
    geew
        79
    geew  
       2016-09-27 14:55:01 +08:00
    @fwings260 正常输入框的验证 前后端都是要做的 前端做是提高用户体验 后端做是为了安全 不一样
    4641585
        80
    4641585  
       2016-09-27 14:56:01 +08:00 via iPad
    你补充的那些东西…后端都不保存信息吗…这后端有毛用…
    shmilyin
        81
    shmilyin  
       2016-09-27 15:00:33 +08:00 via iPhone
    @viator42 客户端的信息是不可信的,价格肯定要服务器计算的,订单提交时更是要严格校验的。
    alouha
        82
    alouha  
       2016-09-27 15:02:07 +08:00
    哈哈,服务器不校验,还不知道校验啥……
    sampeng
        83
    sampeng  
       2016-09-27 15:02:39 +08:00
    CTO 的锅,没有脑子的 CTO 才会同意价格在客户端算
    mazyi
        84
    mazyi  
       2016-09-27 15:04:37 +08:00
    我只求一个 APP 的名字哈哈哈
    winglight2016
        85
    winglight2016  
       2016-09-27 15:06:31 +08:00
    function+sp ,哈哈,十几年没见过这种后台实现方式了,好怀念啊~~~~
    cpp255
        86
    cpp255  
       2016-09-27 15:16:21 +08:00
    客户端做订单价格计算,心真大。
    watzds
        87
    watzds  
       2016-09-27 15:19:49 +08:00 via Android
    大 bug
    BuilderQiu
        88
    BuilderQiu  
       2016-09-27 15:20:27 +08:00
    https://www.v2ex.com/t/301211

    感觉和这个是一个系列的
    yghack
        89
    yghack  
       2016-09-27 15:20:42 +08:00
    二次打包就更严重了
    这么奇葩,在客户端算价格
    厉害
    zylll520
        90
    zylll520  
       2016-09-27 15:21:25 +08:00
    想起来上次有个客户端生成订单号的...
    wobuhuicode
        91
    wobuhuicode  
       2016-09-27 15:21:58 +08:00
    赶紧去写个 JS 小脚本来抢个月饼~哦不,应该是抢个单
    likai
        92
    likai  
       2016-09-27 15:24:44 +08:00
    看到补充.更加觉得不可思议,
    前端知道优惠卷,积分.后端居然不知道.
    这优惠卷积分哪来的?自己脑补的么
    tabris17
        93
    tabris17  
       2016-09-27 15:28:37 +08:00
    @likai 我怀疑积分和优惠券都是存在客户端本地的,服务器端根本没有这些数据,哈哈哈
    xrlin
        94
    xrlin  
       2016-09-27 15:32:00 +08:00
    这。。。需求文档估计也有问题,服务端居然不知道价格和优惠信息
    WhyAreYouSoSad
        95
    WhyAreYouSoSad  
       2016-09-27 15:37:02 +08:00
    虽然是后端建议前端这样做的,但感觉这样的事应该是码农都改知道的啊
    fuxkcsdn
        96
    fuxkcsdn  
       2016-09-27 15:38:36 +08:00
    这还需要二次打包??
    偷懒的方法,安装个 fiddler 就搞定了
    linKnowEasy
        97
    linKnowEasy  
       2016-09-27 15:38:41 +08:00
    明显后端需要校验的啊。。
    不然抓个包, 模拟一下 post 。。。你们公司估计要破产
    shiny
        98
    shiny  
       2016-09-27 15:39:37 +08:00
    @ccloli 那只能先发货再打钱给买家了 233
    FreeDog
        99
    FreeDog  
       2016-09-27 15:45:20 +08:00
    果然简历不能随便贴 / 帐号不能太特别。。
    soland
        100
    soland  
       2016-09-27 15:46:04 +08:00
    商品的价格由客户端计算?

    心真大!!!
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:03 · PVG 05:03 · LAX 13:03 · JFK 16:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.