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

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

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

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

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

    客户端的错误叫 4xx ,和 5 开头的没关系。
        14
    lijy91   193 天前   ♥ 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.
    ```

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

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

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

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

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

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

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

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

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

    RESTful API 的话

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

    我们偷懒了,除了 404
    直接返回 json 格式的字符串。错误码,错误信息都放 json 里。
        86
    ic3z   191 天前 via Android
    @产品经理
        87
    Reficul   191 天前 via Android
    @realityone 又黑 docker😂
        88
    Technetiumer   191 天前
    抛 500 没问题,但是这个 500 一定得是他写的代码抛的,而不是未经处理的服务器出错抛的
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   653 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 84ms · UTC 18:28 · PVG 02:28 · LAX 11:28 · JFK 14:28
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1