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

为什么后台都不喜欢做数据验证,认为前端做了就可以了

  •  1
     
  •   1340641314 ·
    lzxb · 2017-01-12 15:21:51 +08:00 · 20488 次点击
    这是一个创建于 2651 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个不是个例,我们公司的同事都是这样。前端做了,后台就不愿意做了
    第 1 条附言  ·  2017-01-12 16:10:17 +08:00
    看了楼下的回复,感觉是我自己想多了,有些事情自己看不见,并不代表没有做
    第 2 条附言  ·  2017-01-12 17:55:29 +08:00
    没有想到大家这么热烈的回答我的疑问,其实也并不是所有的数据验证都不做,只是有些地方。我跟大家举个例子

    比如一个后台,正常的流程是用户需要验证身份之后才能有某些操作,但是自己跑 API 的时候,不需要认证也能直接发布信息,操作认证之后的各种权限。我问了,他说这不会有问题的
    第 3 条附言  ·  2017-01-12 18:07:21 +08:00
    再举个例子,有一个公司的通讯录,总部门是不能删除的,这个前端是做了验证,但是后台没有做,直接跑 api 是能直接删除的。还有一种情况,就部门有成员是不能删除部门的,前端做了验证,后台没有


    可能是我的标题有问题,诚恳的像大家道歉!
    第 4 条附言  ·  2017-01-13 10:16:20 +08:00
    公司目前是有三个测试,而且还在一直招人,单元测试?这个从来没有听后台提起过,也就是开发的计划中没有单元测试这一块的。

    目前我只针对后台和我对接的这部分接口,使用 mocha + chai 写了 api 的测试,然后就发现了这一系列的问题,然后我就来吐槽了。公司的测试部,貌似没有安排过要写对 api 的自动化测试
    第 5 条附言  ·  2017-01-13 14:05:29 +08:00
    现在已经把测到的相关问题,提交给了产品经理。至于做不做就不再是我关心的问题了
    第 6 条附言  ·  2017-02-03 09:53:30 +08:00
    年后,这个项目的后台负责人已经离职了
    118 条回复    2017-03-06 19:19:45 +08:00
    1  2  
    torbrowserbridge
        1
    torbrowserbridge  
       2017-01-12 15:23:37 +08:00
    倒过来我还能理解。。。
    bk201
        2
    bk201  
       2017-01-12 15:24:02 +08:00
    没法回答你,因为我遇到的公司都是做的。
    baiyi
        3
    baiyi  
       2017-01-12 15:24:58 +08:00   ❤️ 1
    这什么逻辑?前端做是为了友好的用户体验,你服务端是为了安全啊!
    1340641314
        4
    1340641314  
    OP
       2017-01-12 15:25:21 +08:00
    @torbrowserbridge 其实事情是这样的,最近在给后台的 api 写测试,因为后台的 api 都没有数据验证,感觉各种操作就像裸奔一样
    1340641314
        5
    1340641314  
    OP
       2017-01-12 15:26:20 +08:00
    @baiyi 前端做是为了友好的体验这个我能理解,但是我不能理解为何我们后台都不愿意做数据验证
    lyragosa
        6
    lyragosa  
       2017-01-12 15:26:47 +08:00
    倒过来才是对的……
    chenqh
        7
    chenqh  
       2017-01-12 15:27:13 +08:00
    因为懒吧。。。所以 node 才会火呀,一套逻辑写一次
    1340641314
        8
    1340641314  
    OP
       2017-01-12 15:27:22 +08:00
    @bk201 看来还是得看情况
    Lucius
        9
    Lucius  
       2017-01-12 15:27:31 +08:00
    BUG 没有跟 KPI 挂钩吧? 所以后端就怂管了
    nanlong
        10
    nanlong  
       2017-01-12 15:29:37 +08:00
    你们的后端算渎职了 玩忽职守
    1340641314
        11
    1340641314  
    OP
       2017-01-12 15:31:42 +08:00
    @nanlong 有个操作是认证后才能进入各种操作的,这个前端是做了验证,但是直接跑 API ,可以完成各种操作。跟他们说了,但是没有效果,所以忍不住吐槽了
    Asan
        12
    Asan  
       2017-01-12 15:32:10 +08:00
    我们都做了啊
    1340641314
        13
    1340641314  
    OP
       2017-01-12 15:32:27 +08:00
    直接跑 API ,不认证也能跑各种认证后的操作,我觉得这个很坑。
    subpo
        14
    subpo  
       2017-01-12 15:32:29 +08:00
    没办法回答你,没有遇到不做的公司
    viator42
        15
    viator42  
       2017-01-12 15:33:15 +08:00
    就是懒嫌麻烦,等到被坑了就知道了
    kulove
        16
    kulove  
       2017-01-12 15:33:29 +08:00   ❤️ 1
    我是分数据重要程度的,重要就前后端一起写,不重要就前端校验
    arischow
        17
    arischow  
       2017-01-12 15:33:32 +08:00
    倒过来才是对的……
    Victor215
        18
    Victor215  
       2017-01-12 15:34:38 +08:00
    是不是内部系统?不关心安全问题?
    master13
        19
    master13  
       2017-01-12 15:35:22 +08:00
    撸主信不信人家说“用户发来的数据都是不可信的”
    1340641314
        20
    1340641314  
    OP
       2017-01-12 15:35:54 +08:00
    @Victor215 商户使用的系统,以后商户可能会直接充值几万,十几万这样的金额
    nanlong
        21
    nanlong  
       2017-01-12 15:35:59 +08:00
    @1340641314 那岂不是任何人都可以任意修改数据库的数据了?

    挺狠啊
    nanlong
        22
    nanlong  
       2017-01-12 15:36:33 +08:00
    @1340641314 能否透露一下贵司网站地址?
    watzds
        23
    watzds  
       2017-01-12 15:36:57 +08:00 via Android
    那要看会不会影响后台运行,不会的话,后台直接报错吧,反正也不是正常用户。
    cheetah
        24
    cheetah  
       2017-01-12 15:37:12 +08:00
    我觉得是因为前端可以实际看到输入的界面
    1340641314
        25
    1340641314  
    OP
       2017-01-12 15:37:32 +08:00
    @nanlong 这个系统还没有上线,要年后呢。不然出问题了,大过年的谁背锅
    odirus
        26
    odirus  
       2017-01-12 15:39:03 +08:00
    我的理解中后端验证有几个要点:

    1 )验证接收到的参数是否合法;

    2 )根据接收到的参数值,验证该用户是否具有操作目标资源的权限;

    欢迎各位指教提出更加科学、规范的流程,趁此机会多学习一下
    Victor215
        27
    Victor215  
       2017-01-12 15:39:57 +08:00
    @1340641314 牛逼,我以为只有内部系统这么干...,上线了记得把 URL 公布出来大伙看看
    Victor215
        28
    Victor215  
       2017-01-12 15:40:51 +08:00
    @odirus 还有请求时间和资源允许访问的时间。
    1340641314
        29
    1340641314  
    OP
       2017-01-12 15:41:49 +08:00
    @Victor215 这个算了,老板得炒我鱿鱼了
    Immortal
        30
    Immortal  
       2017-01-12 15:42:45 +08:00
    我只知道当初入行写服务端
    一直有句话经常看到
    服务端应该对所有客户端的数据是不信任的
    timi
        31
    timi  
       2017-01-12 15:45:05 +08:00
    系统业务逻辑太多的时候,有时候不太有影响的业务就不在后台校验了,比如电话号码啥的。。。
    nanlong
        32
    nanlong  
       2017-01-12 15:45:56 +08:00
    @1340641314 早晚被人爆,再说上线了 你推广一下 这多正常, 还请请“上线了记得把 URL 公布出来大伙看看”
    odirus
        33
    odirus  
       2017-01-12 15:47:50 +08:00
    @Victor215 哦,这个我没接触过,能否举个栗子,加深一下映象,谢谢
    1340641314
        34
    1340641314  
    OP
       2017-01-12 15:50:13 +08:00
    @nanlong 到时候再说吧
    Victor215
        35
    Victor215  
       2017-01-12 15:54:26 +08:00
    @odirus 比如系统报名,过了时间就应该不能报名才对。
    yubang
        36
    yubang  
       2017-01-12 15:57:22 +08:00   ❤️ 1
    后端怎么会不做数据校验呢?反正业务操作结果我都判断,一般来说上 orm 框架来避免了 sql 注入,数据类型直接强制转换(这个就是导致 500 的原因,但是正常情况 500 不会出现的,出现也没什么问题),如果你是要后端接收每个数据都校验存不存在,类型对不对(为了安全是不是用正则匹配一下?),这事情还得看公司吧,需求每天都变,能赶出来,能保证数据不被黑就好了,友好提示很多时候无能为力呀。后端校验仅仅在保证业务数据安全下用上,你要想后端看不到的地方的校验才是最重要的,看不到不代表后端懒,只是你不知道后端为了安全写了多少逻辑。
    odirus
        37
    odirus  
       2017-01-12 15:57:25 +08:00
    @Victor215 哦哦,明白了,谢谢哈。

    这些事常识问题,当然也不能忽略
    rekey
        38
    rekey  
       2017-01-12 15:59:49 +08:00
    是不是应该说明一下「后台」和「前端」的定义。
    jackroyal
        39
    jackroyal  
       2017-01-12 16:01:57 +08:00 via Android
    我遇到的是,前端不做检验,全部依赖后端去检验
    SuperMild
        40
    SuperMild  
       2017-01-12 16:02:06 +08:00
    你跟他们说没用的,他们又不归你管,在面子上也不能听你的呀,要说就要跟领导说。
    Troevil
        41
    Troevil  
       2017-01-12 16:05:26 +08:00
    做后台需要有觉悟,前台的一切都是不可信的
    morewe
        42
    morewe  
       2017-01-12 16:09:54 +08:00
    @kulove +1 。涉及到安全的后端一定做验证,不涉及安全的话,后端看麻烦程度决定是否做验证。
    chairuosen
        43
    chairuosen  
       2017-01-12 16:12:43 +08:00
    我觉得自己写一个模块,输入要尽量兼容各种情况,输出要统一数据格式,就算报错也要报规范的异常,而不是反一个 tomcat 的 500html ,这样才能保证整个系统健壮性。
    wizardoz
        44
    wizardoz  
       2017-01-12 16:17:35 +08:00
    我是一个业余后端,我认为后端应该做完全部验证.前端做不做那是前端的事.
    cncqw
        45
    cncqw  
       2017-01-12 16:22:23 +08:00
    我是后端,不管什么情况都会做校验,出错直接返回系统错误,让前端校验是为了给用户提示的
    Miy4mori
        46
    Miy4mori  
       2017-01-12 16:22:43 +08:00 via Android
    @1340641314 你们 api 没做 csrf ?没做身份验证?都没有的话就算做检验也是白搭,都有的话前端做了后端可以不做。
    wupher
        47
    wupher  
       2017-01-12 16:25:21 +08:00
    我写后端的时候是都做的。“永远不相信前端”
    btjoker
        48
    btjoker  
       2017-01-12 16:25:22 +08:00
    前端的验证能随意修改通过
    后端不验证就等着爆炸吧
    要嘛捅上去, 要嘛等出事了一起玩完
    admol
        49
    admol  
       2017-01-12 16:34:37 +08:00
    你自己悄悄咪咪的去搞一波事情 , 让他们晓得点厉害 , 下次就怂了
    crazystory
        50
    crazystory  
       2017-01-12 16:47:42 +08:00
    我想知道你从什么地方得到后端"都"不喜欢这个结论
    libo26
        51
    libo26  
       2017-01-12 17:14:37 +08:00 via iPhone
    后台和后台模块间都会做权限和数据校验,前台的数据不校验?
    unknownservice
        52
    unknownservice  
       2017-01-12 17:17:01 +08:00
    没吃过教训呗,被爆一次库再看看。
    annielong
        53
    annielong  
       2017-01-12 17:19:49 +08:00
    做后台一般权限类和一些关键字段进行一下验证,其他的,出问题再说,那么多验证哪里顾得到
    srlp
        54
    srlp  
       2017-01-12 17:22:03 +08:00 via iPhone
    https://www.v2ex.com/t/334074 相映成趣啊
    moonshile
        55
    moonshile  
       2017-01-12 17:28:57 +08:00
    你把网站地址给出来,大伙分分钟教你们后台一堂生动形象的课程
    lianxiaoyi
        56
    lianxiaoyi  
       2017-01-12 17:31:48 +08:00
    不要说都。。。。。。敢不做后端验证都呆不下去三天。。。。
    geew
        57
    geew  
       2017-01-12 17:40:11 +08:00
    后端做数据验证是常识吧喂
    domty
        58
    domty  
       2017-01-12 17:42:15 +08:00
    这有啥,最近在做社保网站的爬虫。
    有一些外包的社保网站把前后端的东西合一块, ajax 提交的参数里直接拼 sql 的 where 条件字符串的我都见过。
    ghl
        59
    ghl  
       2017-01-12 17:43:33 +08:00
    我待过的所有公司都没见过你说这种现象,别说外部或内部系统了,连后端自己调用不对外开放的服务接口都一律强校验,而且所有校验错误都有详细日志。
    一是为了安全,后端的服务对象绝不仅仅是前端,更有各种恶意脚本和黑产工具;二是在遇到因为接口变动导致偶发 bug 时能节省大量 debug 时间;三是校验过程本身就是开发过程中理清逻辑细节的有效工具,写了这块代码就应该对各种输入情况下系统的反应了如指掌,否则如何能确定代码逻辑正确?
    反倒是前端在这方面考虑略少一些,一是因为他们往往只需要对特定的错误给出提示,二是他们没必要也无法校验一些特殊手段产生的输入。
    suduo1987
        60
    suduo1987  
       2017-01-12 17:48:29 +08:00
    不管前后端 不做校验的都是责任感不强的
    F10Y
        61
    F10Y  
       2017-01-12 17:49:42 +08:00
    你们的后端开发信任前端研发呗。像我们平时,从数据集市取别人的数,数据灌到数据库,后端取到数据,前端展示数据,都有数据验证逻辑,谁都不信任谁
    Time2
        62
    Time2  
       2017-01-12 17:59:08 +08:00
    前后都需要做啊,这叫纵深防御!!!!!!

    不做懒而已。。。。
    ylsc633
        63
    ylsc633  
       2017-01-12 18:00:36 +08:00
    感觉正好相反... 我写后端接口,与前端联调的时候,有可能前端没有验证...

    反正不管他! 就着 不要相信前端的传入的任何数据 的原则

    而且,laravel 的校验也很便捷...
    ferock
        64
    ferock  
       2017-01-12 18:02:59 +08:00
    既然他都说不会有问题的,那等有问题再说呗
    Sentur
        65
    Sentur  
       2017-01-12 18:07:56 +08:00
    @ferock 到时候正有问题到了在领导面前 你们就互相踢皮球了 这时候要看领导信谁多一点。。一个说不准。。。
    darrenfang
        66
    darrenfang  
       2017-01-12 18:15:15 +08:00 via iPhone
    设计一个 IValidate 接口:有一个 Validate 方法,调用 Application Service 的方法时,检测参数是否实现此接口,如果是就调用 Validate 方法,所以只需要把验证逻辑写到这个方法里面就行了(我用的 C#, Java 也可以这么干吧,没试过
    sampeng
        67
    sampeng  
       2017-01-12 18:28:25 +08:00
    说来说去,你直接上报你的头,其他就甭管了。这是氛围问题。没有把安全摆在第一位。
    另外,程序员自个儿偷懒,以为反正没人知道。过两年就跑路了,下一位来得擦屁股,那多一事不如少一事咯
    crayygy
        68
    crayygy  
       2017-01-12 18:29:54 +08:00 via iPhone
    @Sentur 所以在这之前争论都应该用邮件,说清楚自己是建议一定要做的,到上面提起来要背锅的时候直接转发邮件
    fantastM
        69
    fantastM  
       2017-01-12 18:37:21 +08:00
    除 private 方法信任参数,其它都做
    smallpath
        70
    smallpath  
       2017-01-12 18:38:01 +08:00
    不会有问题😔? 蜜汁自信
    passion336699
        71
    passion336699  
       2017-01-12 18:38:05 +08:00 via Android
    因为懒。。
    Sentur
        72
    Sentur  
       2017-01-12 18:43:21 +08:00
    @crayygy 对的 必须要留证据
    Zane0001
        73
    Zane0001  
       2017-01-12 18:46:18 +08:00
    最喜欢这样的竞争对手
    xcatliu
        74
    xcatliu  
       2017-01-12 19:03:27 +08:00
    资源有限的情况下也应该优先实现后端验证
    wsy2220
        75
    wsy2220  
       2017-01-12 19:06:51 +08:00
    活久见
    onlyhot
        76
    onlyhot  
       2017-01-12 19:08:05 +08:00 via iPhone
    倒过来
    mazyi
        77
    mazyi  
       2017-01-12 19:54:06 +08:00
    笑~
    xiaowangge
        78
    xiaowangge  
       2017-01-12 21:57:26 +08:00
    换一家公司吧。我挺好奇公司名字的 =。=
    murmur
        79
    murmur  
       2017-01-12 22:00:02 +08:00
    @chenqh 是么?如果是 required number email 这种简单校验 java 用个 validator 也能校验
    难校验的是业务校验,比如库存、唯一、数量、金额、优惠这些
    maplerecall
        80
    maplerecall  
       2017-01-12 22:08:44 +08:00
    如果项目还未上线后端不做验证很正常,一般验证规则是最后做的,但如果上了还没做那就有点厉害了……
    django123
        81
    django123  
       2017-01-12 22:18:55 +08:00
    嗯,看了大部分的回复,还是感到欣慰的

    还是那句啊,一切的输入都是不可信的
    qinxi
        82
    qinxi  
       2017-01-12 22:29:43 +08:00
    @darrenfang java 的 jsr303 标准
    crossoverJie
        83
    crossoverJie  
       2017-01-12 22:41:43 +08:00
    不要相信用户的任何输入这个观念应该都知道的吧
    jyf
        84
    jyf  
       2017-01-12 22:44:13 +08:00
    一般来说 做后端要假设提交过来的数据是故意害你的 我以前就经常跟公司的 cto 互相脑洞攻防
    但是考虑到实际情况 像内部系统 或者外层有隔绝的 可以懒得做
    但是像你说的这种还要上线的都不做 要么是渎职 要么就是故意留后门了
    eyp82
        85
    eyp82  
       2017-01-12 23:33:10 +08:00
    在这里吐槽没用, 你需要的是报告你的直属领导, 然后让他自己看要怎么办. 但是不要自己去跟后端吵.
    把锅甩掉.
    mritd
        86
    mritd  
       2017-01-12 23:36:01 +08:00 via iPhone
    那是你看到的后台……我只相信一句话 "相信前台检验的都是沙比"…… F12 一下全能改,前台检验只防普通用户
    railgun
        87
    railgun  
       2017-01-12 23:57:38 +08:00
    赶紧发邮件给领导,别到时候锅甩不掉
    Chriser
        88
    Chriser  
       2017-01-13 07:21:19 +08:00
    明显是懒,不上报以后哭晕在厕所的机会都没了。
    darrenfang
        89
    darrenfang  
       2017-01-13 07:32:30 +08:00 via iPhone
    @qinxi 谢谢,有空看看
    AlisaDestiny
        90
    AlisaDestiny  
       2017-01-13 08:13:02 +08:00 via iPhone
    @domty 遇到这种拼 sql 的,那就干点事,给他上一课。
    IJustmaogepao
        91
    IJustmaogepao  
       2017-01-13 08:50:16 +08:00
    mark,等上线把 url 发出来让我们观摩一下。。
    stormpeach
        92
    stormpeach  
       2017-01-13 09:09:59 +08:00
    你们后端不走单元测试的?
    gujikun
        93
    gujikun  
       2017-01-13 09:40:49 +08:00
    楼主做的大部分是公司内的系统吧。后端懒很正常。你做个直接公网面对消费者的,会有人分分钟交会后台怎么学编码的。
    jimrok
        94
    jimrok  
       2017-01-13 09:47:02 +08:00
    因为你们的测试不够强大
    domty
        95
    domty  
       2017-01-13 09:54:00 +08:00
    @AlisaDestiny
    政府机关的系统啊,真干了人家就带着警察来给我上一课了。
    Nutlee
        96
    Nutlee  
       2017-01-13 09:55:19 +08:00
    说实话.... 我这也是 同样给后端提醒过... 后端同学还反问过我 “难道我每个数据都验证??”
    zzn
        97
    zzn  
       2017-01-13 10:01:45 +08:00
    后端不验证数据是很危险的
    tairan2006
        98
    tairan2006  
       2017-01-13 10:03:45 +08:00
    你需要换家公司
    baoguok
        99
    baoguok  
       2017-01-13 10:32:00 +08:00
    测试没做到位
    baoguok
        100
    baoguok  
       2017-01-13 10:32:26 +08:00
    很多程序员都和懒,遇到过这种,后台数据不做校验
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1003 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 22:05 · PVG 06:05 · LAX 15:05 · JFK 18:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.