同事宁愿把 500 页面丢出去也不愿意对提交的数据做验证。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
AdamMaggie
V2EX    程序员

同事宁愿把 500 页面丢出去也不愿意对提交的数据做验证。

  •  
  •   AdamMaggie 2017 年 1 月 12 日 12155 次点击
    这是一个创建于 3310 天前的主题,其中的信息可能已经有所发展或是发生改变。
    他说,既然他提交了错误的数据就应该给 500 的页面。明明可以对错误做统一的处理为啥还要做验证~
    说服不了他,
    我真的是尽力了_(:з」∠)_
    88 条回复    2017-01-14 13:40:26 +08:00
    ivvei
        1
    ivvei  
       2017 年 1 月 12 日
    500 就是他的统一处理
    hiboshi
        2
    hiboshi  
       2017 年 1 月 12 日
    他只是懒,换个时间和他说下,比如周一
    imn1
        3
    imn1  
       2017 年 1 月 12 日
    你们上司不管这事么?总是 500 影响企业形象啊
    leisure
        4
    leisure  
       2017 年 1 月 12 日
    错误的数据是啥?客户端不做校验么
    dubuqingfeng
        5
    dubuqingfeng  
       2017 年 1 月 12 日
    那么就有机会 SQL 注入了,以及各种 DOS 。
    wenhaoy
        6
    wenhaoy  
       2017 年 1 月 12 日
    能出 500 ,说明是异常了,这种代码一般都会有漏洞。看他代码,找个漏洞“自己造”个数据让系统崩溃 /误删 /清空等等,让他认识到错误。还不听,就让老板认识到错误。

    如果是他经过判断,自己抛的 500 另说~
    AdamMaggie
        7
    AdamMaggie  
    OP
       2017 年 1 月 12 日 via Android
    @leisure 客户端的检验也是很被动的,不说他们也不做。
    murmur
        8
    murmur  
       2017 年 1 月 12 日
    能出 500 直接接住了不就完了么。。给用户显示个友好页面这么难么
    old9
        9
    old9  
       2017 年 1 月 12 日 via Android
    客户端提交了错误数据,不应该丢 4xx 么?
    timi
        10
    timi  
       2017 年 1 月 12 日
    没有测试人员吗
    AdamMaggie
        11
    AdamMaggie  
    OP
       2017 年 1 月 12 日 via Android
    @old9 他所给的 500 ,是因为客户端提交了错误的数据,导致服务端出现了异常返回的。也就是说他并没有处理这个_(:з」∠)_
    AdamMaggie
        12
    AdamMaggie  
    OP
       2017 年 1 月 12 日 via Android
    @murmur 都是一些很小的问题,他认为这些数据都应该是经过了客户端验证的,所以他代码里面很少会有接住的代码。然而我们的前端的小伙伴也并不主动去验证数据|ω`)
    jarlyyn
        13
    jarlyyn  
       2017 年 1 月 12 日
    告诉他 500 错误属于服务器错误,是他的工作错误。

    让他记录到 Log.每个月统计 500 错误数量,作为他的 kpi 。

    客户端的错误叫 4xx ,和 5 开头的没关系。
    lijy91
        14
    lijy91  
       2017 年 1 月 12 日   1
    按照 HTTP 标准,验证出错是应该返回 422 的

    ```
    422 Unprocessable entity

    The request was formatted correctly but cannot be processed in its current form. Often used when the specified parameters fail validation errors.
    ```

    另外,服务端验证能更有效的保证数据的准确完整,楼主可以试试通过这个缺陷把系统搞崩溃掉来证明你是对的(慎重,同事关系也很重要)。
    flyingghost
        15
    flyingghost  
       2017 年 1 月 12 日   8
    电源插头插反了就是应该爆掉,不应该友善的设计保护电路。
    汽车撞墙上就是应该去死,不应该友善的弹出安全气囊。
    红灯时候过马路就是应该被车撞死,不应该设计行人路权最大的交通规则。

    不懂得设计里的防呆设计,这叫见识短。
    见识短没关系可以学,但连一丁点浅显的人性化思想都没有,这叫僵硬直板的技术型思维。

    但以上都是表象。
    我一直认为,不懂换位思考的根本原因,就是自私。
    ys0290
        16
    ys0290  
       2017 年 1 月 12 日 via iPhone
    我他娘的一个门外汉都知道前端后端都要检验数据,说白了,你这同事欠 X
    skywayman
        17
    skywayman  
       2017 年 1 月 12 日
    觉得这个得分前提,大家不能一上来就"爆"他!
    如果一个页面有特么 N 多输入框,每个框的值校验不一样,输出提示又各不相同,业务指导不明确,主要是开发时间紧,换了是我,也是直接 500...我得考虑我先要活下去,再来谈你们的用户体验...
    cmaster
        18
    cmaster  
       2017 年 1 月 12 日
    这代码能用?试用期都活不过吧
    TonySheva
        19
    TonySheva  
       2017 年 1 月 12 日
    。。 500 页面??后端写的接口返回处理的结果就可以了啊,他保证了安全以及给出对应提示,展示的页面这些不应该是前端做??为什么要爆他捏?
    jinhan13789991
        20
    jinhan13789991  
       2017 年 1 月 12 日 via Android   2
    相信我,默默做好自己的。提高自己然后跳槽。不然你会得罪人,最后也干不下去。
    whimsySun
        21
    whimsySun  
       2017 年 1 月 12 日
    相信我,默默做好自己的。提高自己然后跳槽。不然你会得罪人,最后也干不下去。
    bk201
        22
    bk201  
       2017 年 1 月 12 日 via iPhone
    其实这个问题就是到底是应该前端负责校验还是后端.我认为都需要,并且前端校验要更严格一些.
    21grams
        23
    21grams  
       2017 年 1 月 12 日
    既然 http 协议定义了 500 ,那肯定有它的用处。
    liuzhiyong
        24
    liuzhiyong  
       2017 年 1 月 12 日
    @AdamMaggie 真的很疯狂,服务端验证当然是必需的。不过呢,你别得罪人,日子还得接着混。说两三遍,他不接受意见,那就算了。
    HmyBmny
        25
    HmyBmny  
       2017 年 1 月 12 日 via Android
    500 强
    zhaoshijun
        26
    zhaoshijun  
       2017 年 1 月 12 日
    你是他领导吗
    AdamMaggie
        27
    AdamMaggie  
    OP
       2017 年 1 月 12 日
    @zhaoshijun 不是。。。。
    zhaoshijun
        28
    zhaoshijun  
       2017 年 1 月 12 日
    @AdamMaggie 你管的多了
    kankana
        29
    kankana  
       2017 年 1 月 12 日 via iPhone
    楼主要不来我公司吧……
    Midnight
        30
    Midnight  
       2017 年 1 月 12 日
    500 根本就没去验证数据咯
    neutrino
        31
    neutrino  
       2017 年 1 月 12 日
    然后他把 500 改成了 200 ,一律返回:服务器内部错误,请重试。
    sighforever
        32
    sighforever  
       2017 年 1 月 12 日
    看是什么样的页面呗,给自己人弄得临时小工具,确实不必要瞎折腾
    sharkli
        33
    sharkli  
       2017 年 1 月 12 日
    告诉他很多路由器,运营商劫持 500 , 404 啥的错误。
    Cu635
        34
    Cu635  
       2017 年 1 月 12 日
    @skywayman
    其实“业务指导不明确”这个最关键,要是明确的话倒是可以第一版本先直接 500 ,后续再升级。可要是不明确的话就完蛋了。
    yoa1q7y
        35
    yoa1q7y  
       2017 年 1 月 12 日
    一个正常的网站一般很少会出现 500 页面
    这绝对属于后端的错误、异常
    并不是他所说的“处理流程”
    just4test
        36
    just4test  
       2017 年 1 月 12 日
    必须是应该丢 400 页面啊。
    just4test
        37
    just4test  
       2017 年 1 月 12 日
    @AdamMaggie “他认为这些数据都应该是经过了客户端验证的” 后端不应该信任提交的数据是常识。就这一点就可以往死里喷他。
    kushao1267
        38
    kushao1267  
       2017 年 1 月 12 日
    老大跟我们后端说,绝对不能让用户看到 500 开头的...
    binjoo
        39
    binjoo  
       2017 年 1 月 12 日
    @just4test
    我就想不明白,那家伙难道不知道数据可以伪造吗?就这种水平完全是项目的灾难啊。
    master13
        40
    master13  
       2017 年 1 月 12 日
    撸主去知乎一类的网站看看“ HOW TO work with the ones you don't like ”
    yubang
        41
    yubang  
       2017 年 1 月 12 日   2
    这个得看各种因素,本身前端就有一次校验,然后后端有一个数据需要 int ,后端直接强制转换成 int ,然后不是 int 的时候抛出 500 也不会有什么危害,同理没传某个参数导致 key 不存在而抛出异常,而不会有什么危害。反正不要出漏洞就好了,非正常数据前端应该拦截,绕开前端过去,抛 500 无可厚非。反正一句话,他写的东西不被攻击就好了。
    1340641314
        42
    1340641314  
       2017 年 1 月 12 日
    @yubang 这个在理
    FionWay
        43
    FionWay  
       2017 年 1 月 12 日
    既然知道什么数据是错的,什么是对的为什么不约束?让他走一条路,明知道此路不通硬要人走,然后到断头处再回头?
    FionWay
        44
    FionWay  
       2017 年 1 月 12 日
    某种程度上,开发的水平体现在严谨、高效,人都是懒的,但是有水平的人会想办法用好的方式解决
    FionWay
        45
    FionWay  
       2017 年 1 月 12 日
    @just4test 业务的数据校验确实要做,那么问题总是出在谁做,虽然我只是产品的,但是我都知道,严谨的情况是要共同验证的,而且验证的机制需要同步,客户端验证为了减少接口请求,服务端验证为了严谨, 500 这种在我理解是系统崩溃,根本不在业务范畴
    wupher
        46
    wupher  
       2017 年 1 月 12 日
    因为他懒,永远不要相信前端校验。

    无论是 js,还是 Android ,还是 iOS 都不能相信。
    20131115
        47
    20131115  
       2017 年 1 月 12 日
    前后端都要进行校验。
    前端校验只是减少不必要的请求,有问题发现在萌芽状态,减少错误提示的延迟,体验也好一些。
    服务端做校验是必须的,如果你的数据不做校验,任其异常,指不定要出什么幺蛾子。

    对于你同事的这种行为,我表示鄙视!
    realityone
        48
    realityone  
       2017 年 1 月 12 日 via iPhone
    有一说一
    Docker Daemon 的 API 大部分客户端错误都叫 500
    lan894734188
        49
    lan894734188  
       2017 年 1 月 12 日 via Android
    还有人直接不返回的
    coofly
        50
    coofly  
       2017 年 1 月 12 日
    发地址,让 v2exer 们教他做猿
    am241
        51
    am241  
       2017 年 1 月 12 日 via Android
    @flyingghost 不要侮辱技术性思维,这就是懒+不负责任
    xcatliu
        52
    xcatliu  
       2017 年 1 月 12 日
    @skywayman
    > 觉得这个得分前提,大家不能一上来就"爆"他!
    > 如果一个页面有特么 N 多输入框,每个框的值校验不一样,输出提示又各不相同,业务指导不明确,主要是开发时间紧,换了是我,也是直接 500...我得考虑我先要活下去,再来谈你们的用户体验...

    你没看懂,楼主的同事的方案是什么都不验证,只要服务端有异常就返回 500 。而不是验证后不通过统一返回 500 。
    hqfzone
        53
    hqfzone  
       2017 年 1 月 12 日
    懒,或者没信心处理好。
    techmoe
        54
    techmoe  
       2017 年 1 月 12 日 via Android
    没啥大不了的,顶多就是不小心输入错误数据的用户看着一个 500 一脸懵逼呗
    zonghua
        55
    zonghua  
       2017 年 1 月 12 日
    @realityone 最怕空指针异常 2333
    graycreate
        56
    graycreate  
       2017 年 1 月 12 日 via iPhone
    其实也说明后端程序不够健壮,后端不应该依赖前端的输入。换句话说,不管前端做不做校验后端都要做,后端一定要把好门,因为后端的校验是最后一道安全门。
    tabris17
        57
    tabris17  
       2017 年 1 月 12 日
    提交错误数据应该报 400 错误,而不是 500 错误,说明请求数据错误
    cs419
        58
    cs419  
       2017 年 1 月 13 日 via Android
    实际上,他应该检验,不过对于你就是多管闲事。
    不管前台后台验证要么需求讲清楚,要么让测试催。
    对于电脑小白,看到 500 没准会怀疑电脑中毒或者坏了
    changwei
        59
    changwei  
       2017 年 1 月 13 日 via Android
    一般这种人,要么就是偷懒,并且 pm 和老板还漠不关心的,要么就是对用户体验一点概念也没有。

    他可能是面向工资在编程,而不是把编程,实现产品作为一种艺术。
    dantegg
        60
    dantegg  
       2017 年 1 月 13 日
    揍一顿就好了
    ovear
        61
    ovear  
       2017 年 1 月 13 日 via Android
    其实。。 500 有啥不好的。。看了这么久也没看明白,谁规定 500 非得跳出个错误页面了。。 api 接口不是通除了返回信息来判断,通过 status code 也很常见啊
    比如说封装个 error 方法,在提示错误的同时设置 status code 不是很正常么?
    XDA
        62
    XDA  
       2017 年 1 月 13 日 via iPhone
    我只知道按规则来,自己犯的错为什么要别人给你擦屁股
    simo
        63
    simo  
       2017 年 1 月 13 日
    没有标准,只有适合(考虑公司团队规模,产品规模,业务规模,应用场景因素等太多了)
    假设功能只有内部人用,极速开发等场景,我负责的项目,省略后台校验没问题。
    lz 没说明这件事儿的背景,吃瓜群众们不要乱说
    Clarencep
        64
    Clarencep  
       2017 年 1 月 13 日
    接收到错误的入参确实不应该用 500 ,使用 400 Bad Request 会更好一点。

    话说 500 的服务端错误一般应该是会记录详细的错误日志的吧? 如果用户输入错误都是返回 500 的话倒不失为一个 DOS 的攻击入口
    Clarencep
        65
    Clarencep  
       2017 年 1 月 13 日
    @jarlyyn 500 错误作为 kpi 这事情以前我们公司还真搞过,但效果就呵呵了 -- 同事搞个 try catch 然后所有的 500 都改成 404 (/ □ \)
    MiguelValentine
        66
    MiguelValentine  
       2017 年 1 月 13 日
    我建议你报警
    AdamMaggie
        67
    AdamMaggie  
    OP
       2017 年 1 月 13 日 via Android
    @simo 不是内部功能,是对外给客户的
    limerick
        68
    limerick  
       2017 年 1 月 13 日
    你们两个的要求不一致。 一个要求是健壮性,一个要求是正确性。至于谁对谁错,就得你们产品的技术要求。
    ooppstef
        69
    ooppstef  
       2017 年 1 月 13 日
    qa 提个 bug 在系统里面,不改就算事故...
    wizardoz
        70
    wizardoz  
       2017 年 1 月 13 日
    401 402 403 404 什么的可以合理使用, 500 不能接受啊,500 浏览器的提示是服务器崩溃.
    wizardoz
        71
    wizardoz  
       2017 年 1 月 13 日
    他这不是懒,他只是太将就了,他没有那种希望自己做出的东西要尽善尽美的欲望.他不适合干这行.
    R18
        72
    R18  
       2017 年 1 月 13 日
    加入 KPI 体系
    daveze
        73
    daveze  
       2017 年 1 月 13 日
    500 一般是服务器代码异常了,异常了就说明是代码有 bug ,需要修复。期望的是 500 永远不要出现,一旦出现就要找到原因并直到它不出现。
    用户数据校验失败应该是返回 4xx 错误更合适,这种应该有个合理的提示告诉用户。
    GeBron
        74
    GeBron  
       2017 年 1 月 13 日
    服务端应该校验客户端提交的数据。
    lrh3321
        75
    lrh3321  
       2017 年 1 月 13 日
    加入 KPI 体系 +1

    我们这后台主要做 RESTful API 。 HTTP 状态码一律 200 ,消灭 5xx
    lovejoy
        76
    lovejoy  
       2017 年 1 月 13 日
    @jarlyyn 然后他在 nginx 加了个 error_page 的配置,全部改成了 302
    shengchao
        77
    shengchao  
       2017 年 1 月 13 日
    不应该是服务端和客户端都要做验证吗,是我理解错了吗?
    shengchao
        78
    shengchao  
       2017 年 1 月 13 日
    客户端验证是为了更好的用户体验,错误提示什么的,服务端验证是为了程序能够安全的运行,都得做!!!
    baiyi
        79
    baiyi  
       2017 年 1 月 13 日
    @lrh3321

    RESTful API 的话

    HTTP 状态码 **不能** 一律 200
    SuperMild
        80
    SuperMild  
       2017 年 1 月 13 日 via iPad
    你管他干嘛,领导自然会管他的
    SuperMild
        81
    SuperMild  
       2017 年 1 月 13 日 via iPad
    而且你是想当场说服他让他马上承认错误并且谢谢你?一般人都会下意识反驳你的,面子啊。
    ichou
        82
    ichou  
       2017 年 1 月 13 日 via iPhone
    @lrh3321
    极致的 RESTful http 状态是有语意的,全 200 还不够啊,哈哈哈
    不过这个经常被乱用,处理起来也麻烦,感觉大部分场景都是约定一下选几个粗来用
    forestyuan
        83
    forestyuan  
       2017 年 1 月 13 日
    这个同事肯定不对,后端肯定要校验的。但是,如果领导都不管的话,楼主为啥要操这个心?
    gamexg
        84
    gamexg  
       2017 年 1 月 14 日 via Android
    一些理论不可能出错的数据(除非用户攻击)直接强转,错误抛 500 没什么问题。
    例如:文章 id ,正常都是数字,有人尝试注入报 500 没什么问题(友好 500 页面,不能把 sql 爆出来)。
    lrh3321
        85
    lrh3321  
       2017 年 1 月 14 日
    @baiyi

    我们偷懒了,除了 404
    直接返回 json 格式的字符串。错误码,错误信息都放 json 里。
    ic3z
        86
    ic3z  
       2017 年 1 月 14 日 via Android
    @产品经理
    Reficul
        87
    Reficul  
       2017 年 1 月 14 日 via Android
    @realityone 又黑 docker
    Technetiumer
        88
    Technetiumer  
       2017 年 1 月 14 日
    抛 500 没问题,但是这个 500 一定得是他写的代码抛的,而不是未经处理的服务器出错抛的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4526 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 06:58 PVG 14:58 LAX 22:58 JFK 01:58
    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