为什么后台都不喜欢做数据验证,认为前端做了就可以了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
1340641314
V2EX    程序员

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

  •  1
     
  •   134061314
    lzxb 2017-01-12 15:21:51 +08:00 22108 次点击
    这是一个创建于 3262 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个不是个例,我们公司的同事都是这样。前端做了,后台就不愿意做了
    第 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
    倒过来才是对的……
    simple2025
        7
    simple2025  
       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
    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
    你们的后端开发信任前端研发呗。像我们平时,从数据集市取别人的数,数据灌到数据库,后端取到数据,前端展示数据,都有数据验证逻辑,谁都不信任谁
    1Satoshi
        62
    1Satoshi  
       2017-01-12 17:59:08 +08:00
    前后都需要做啊,这叫纵深防御!!!!!!

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

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

    而且,laravel 的校验也很便捷...
    ferock
        64
    ferock  
    PRO
       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  
    PRO
       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     Solana     3724 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 00:55 PVG 08:55 LAX 16:55 JFK 19:55
    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