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

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

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

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

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

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

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

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

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

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

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

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

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

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

    RESTful API 的话

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

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