• 请不要在回答技术问题时复制粘贴 AI 生成的内容
AdamMaggie
V2EX  ›  程序员

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

  •  
  •   AdamMaggie · Jan 12, 2017 · 12365 views
    This topic created in 3410 days ago, the information mentioned may be changed or developed.
    他说,既然他提交了错误的数据就应该给 500 的页面。明明可以对错误做统一的处理为啥还要做验证~
    说服不了他,
    我真的是尽力了_(:з」∠)_
    88 replies    2017-01-14 13:40:26 +08:00
    ivvei
        1
    ivvei  
       Jan 12, 2017
    500 就是他的统一处理
    hiboshi
        2
    hiboshi  
       Jan 12, 2017
    他只是懒,换个时间和他说下,比如周一
    imn1
        3
    imn1  
       Jan 12, 2017
    你们上司不管这事么?总是 500 影响企业形象啊
    leisure
        4
    leisure  
       Jan 12, 2017
    错误的数据是啥?客户端不做校验么
    dubuqingfeng
        5
    dubuqingfeng  
       Jan 12, 2017
    那么就有机会 SQL 注入了,以及各种 DOS 。
    wenhaoy
        6
    wenhaoy  
       Jan 12, 2017
    能出 500 ,说明是异常了,这种代码一般都会有漏洞。看他代码,找个漏洞“自己造”个数据让系统崩溃 /误删 /清空等等,让他认识到错误。还不听,就让老板认识到错误。

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

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

    客户端的错误叫 4xx ,和 5 开头的没关系。
    lijy91
        14
    lijy91  
       Jan 12, 2017   ❤️ 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  
       Jan 12, 2017   ❤️ 8
    电源插头插反了就是应该爆掉,不应该友善的设计保护电路。
    汽车撞墙上就是应该去死,不应该友善的弹出安全气囊。
    红灯时候过马路就是应该被车撞死,不应该设计行人路权最大的交通规则。

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

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

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

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

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

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

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

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

    RESTful API 的话

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

    我们偷懒了,除了 404
    直接返回 json 格式的字符串。错误码,错误信息都放 json 里。
    ic3z
        86
    ic3z  
       Jan 14, 2017 via Android
    @产品经理
    Reficul
        87
    Reficul  
       Jan 14, 2017 via Android
    @realityone 又黑 docker😂
    Technetiumer
        88
    Technetiumer  
       Jan 14, 2017
    抛 500 没问题,但是这个 500 一定得是他写的代码抛的,而不是未经处理的服务器出错抛的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5614 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 321ms · UTC 05:59 · PVG 13:59 · LAX 22:59 · JFK 01:59
    ♥ Do have faith in what you're doing.