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

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

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

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

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

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

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

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

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

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

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

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

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

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

    RESTful API 的话

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

    我们偷懒了,除了 404
    直接返回 json 格式的字符串。错误码,错误信息都放 json 里。
    ic3z
        86
    ic3z  
       2017-01-14 09:44:38 +08:00 via Android
    @产品经理
    Reficul
        87
    Reficul  
       2017-01-14 10:50:25 +08:00 via Android
    @realityone 又黑 docker😂
    Technetiumer
        88
    Technetiumer  
       2017-01-14 13:40:26 +08:00
    抛 500 没问题,但是这个 500 一定得是他写的代码抛的,而不是未经处理的服务器出错抛的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1118 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:36 · PVG 02:36 · LAX 10:36 · JFK 13:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.