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

安全 QA 说只允许 POST/GET 请求,其它的都不安全?

  •  1
     
  •   dog82 · 302 天前 · 13409 次点击
    这是一个创建于 302 天前的主题,其中的信息可能已经有所发展或是发生改变。

    其它的 HTTP 方法都被评为中级风险,不整改估计过不了安全关,系统没法上线,这事如何破? 我严格要求团队遵循 restful 规范,写了一堆 PUT/Delete/BATCH

    161 条回复    2023-07-28 02:34:30 +08:00
    1  2  
    leo97
        1
    leo97  
       302 天前 via Android
    安全水平不行
    infun
        2
    infun  
       302 天前   ❤️ 2
    安不安全不知道,方便是真的方便
    corcre
        3
    corcre  
       302 天前   ❤️ 4
    写邮件, 让他留书面证据, 然后拿去问项目负责人, 他说改你就改
    retanoj
        4
    retanoj  
       302 天前   ❤️ 6
    这事儿怨不得你们的安全 QA ,要埋怨还得找根源(比如他们遵守的那份规范的制定方)
    trlove
        5
    trlove  
       302 天前
    很多安全检测工具是只允许 post/get 更严重的是只允许 post 跟你们的安全人员用的安全检测工具有关
    guilinxiaobing
        6
    guilinxiaobing  
       302 天前   ❤️ 20
    安全 QA 可以下岗了,他真的不合适做这个。
    在他知识里,喝 25°的水是安全,26°的水不安全,但是 25°的敌敌畏喝了也安全。
    dog82
        7
    dog82  
    OP
       302 天前
    @corcre 我就是项目负责人,花钱请的外面的网信安团队对项目做安全评估
    CEBBCAT
        8
    CEBBCAT  
       302 天前   ❤️ 10
    那当然是举报前端使用 OPTIONS 方法有安全漏洞 /doge
    CEBBCAT
        9
    CEBBCAT  
       302 天前
    即如楼主就是项目负责人,“安全 QA”是请的第三方公司,那么目标就明确了,是项目上线,阻碍也明确了,“安全 QA”设置了不合理的规则。

    可以分享一下跟对方团队的沟通进度吗?
    corcre
        10
    corcre  
       302 天前
    @dog82 这下场面就非常尴尬...那我估计你是乙方, 乙方的话估计甲方也不听你说的, 只认第三方的评估报告, 那你也就只能改了(要不你拉上 QA 去甲方那说说其实这一项没啥影响
    leonshaw
        11
    leonshaw  
       302 天前
    @dog82 那就再升级
    shengX
        12
    shengX  
       302 天前
    我之前所在的项目也是(运营商),需要拿到安全测试报告才能上线,因为项目中有没有限制 put 、delete 的请求,安全不通过,后来为了上线,直接禁用掉了
    guilinxiaobing
        13
    guilinxiaobing  
       302 天前   ❤️ 4
    行业的耻辱
    datou
        14
    datou  
       302 天前
    不允许 option 吗?
    AuYuHui
        15
    AuYuHui  
       302 天前
    全部 POST 吧,还少 一个 GET 接口
    kuaner
        16
    kuaner  
       302 天前
    这事可太常见了,也不能怪安全公司,很可能是他们遵守的某个 GB 里面定义的
    yinmin
        17
    yinmin  
       302 天前 via iPhone   ❤️ 2
    @dog82 如果是 server to server ,通常加 ip 白名单能过安全评估
    Leviathann
        18
    Leviathann  
       302 天前
    直接 JSON-RPC 一步到位
    x86
        19
    x86  
       302 天前   ❤️ 1
    叫人事查下安全的背景,不是关系户就是短期培训班出来的
    ttentau1
        20
    ttentau1  
       302 天前   ❤️ 2
    正常,iis 如果没配置好,用 put 请求就可以写东西然后执行。所以直接全禁了最好
    raycool
        21
    raycool  
       302 天前   ❤️ 2
    建议全部 post 一把梭
    w8123
        22
    w8123  
       302 天前   ❤️ 12
    只有我觉得 restful 规范不行嘛,在协议上用一堆方法,不够麻烦的,get/post 一把梭多好
    gam2046
        23
    gam2046  
       302 天前   ❤️ 3
    以我对接过一些国企的经验来看,整改就完事。

    和对方抬杠毫无意义,甲方需要第三方出具合格的报告,第三方依据的一些国标或者甲方内部的安全审计标准来的,无条件服从就行了。第三方甚至能告诉你哪里不合格已经很 nice 了,有些刁民只说不合格,但是不告诉你原因,全靠猜。

    赚钱嘛,不寒掺。任何规范都需要为赚钱让路。
    dog82
        24
    dog82  
    OP
       302 天前
    @gam2046 我估计最终得整改,不过我想挣扎一下
    liuidetmks
        25
    liuidetmks  
       302 天前
    月经贴
    k9982874
        26
    k9982874  
       302 天前 via Android   ❤️ 1
    不能无视的话,前面套层网关,请求全用 post ,路由和参数全放 body 里,在网关重新解析转发到业务 service
    Nazz
        27
    Nazz  
       302 天前
    反问他为什么 PUT/DELETE 不安全, 和 GET/POST 有什么区别
    justNoBody
        28
    justNoBody  
       302 天前   ❤️ 1
    这个问题我在 v 站都看到好多次了,OP 可以搜一下帖子能找到靠谱的原因。
    凭我的记忆,印象中是因为多年前 IIS 导致的这些 QA 公司认为非 POST 和 GET 请求不安全。
    但是甲方爸爸并不懂这些,他们也不在乎,反正让你改你就改,你除了改没有别的办法。

    把前端所有的 PUT/DELETE/PATCH 都改成 POST (一般来说前端请求方法都是统一的,所以实际上应该只需要改几行代码就可以了),在 header 中增加一个自定义属性,后台转一下,后台代码就不用改了。
    如果是用的 spring ,增加一个`OncePerRequestFilter`实例就可以了
    guilinxiaobing
        29
    guilinxiaobing  
       302 天前
    @k9982874
    我想到了发财之路,开发一套 js 和网关来卖, 前端集成这个 js ,然后到适配器网关,然后还原成原来的请求。专门解决这种“安全的项目”的痛
    janzwong
        30
    janzwong  
       302 天前   ❤️ 7
    应该是合规侧有强制要求,因为除 GET 、POST 之外的方法都存在一定安全隐患,例如 OPTIONS 可以查询支持的方法,比方说支持 PUT ,但是 apache 存在有关 PUT 方法上传 webshell 或任意文件的漏洞(像是 CVE-2017-12615 诸如此类的漏洞),所以安全 QA 才会有这样的要求。
    githmb
        31
    githmb  
       302 天前
    不允许 HEAD 吗?
    raysonx
        32
    raysonx  
       302 天前
    http 的各种 verb 只有拼写上的不同。历史上有些应用(比如 IIS 的 webdav )使用了某些 verb 且实现上存在漏洞,被某些安全规范给一刀切了
    xshell
        33
    xshell  
       302 天前
    post 一把锁。
    dog82
        34
    dog82  
    OP
       302 天前
    @xshell 我终于知道为啥有些项目 POST 一把梭哈了,原来还喷他们不动 restful 规范,现在自己吃亏了才知道疼
    zpf124
        35
    zpf124  
       302 天前   ❤️ 12
    楼主的问题我们也遇到过,但你们的 QA 估计就只会背八股文,知其然不知其所以然,实际上是 WebDAV(对小白)不安全。
    restful 是 作者发现人家 WebDAV 搞的这套 http method 很符合他的想法,所以复用(偷)了他们定义的 http method 而已,仅此而已,实际两者没什么关系。



    而安测会将这个提示为风险的实际原因是针对小白的规则拦截导致被 AOE ,根本原因是有些小白用 IIS 或者其他一键脚本开启了 WebDAV 服务但没做鉴权,效果就和允许匿名的 FTP 服务一样,导致文件被脚本小子加密或者删除。


    我们是某个合作的甲方人家找的安测出的报告里包含 “中风险漏洞: 使用 PUT ,http method”, 不过人家给的报告还包含里处理建议/参考, “打开服务设置,选择 IIS 服务器,关闭 WebDAV 服务”,所以我们一看就明白了

    另外我们的要求只是高危漏洞必须处理,其他的可以商量,所以我们就解释说明了一下就 ok 了,如果你们的安测是甲方
    的而且道理说不通,要求必须按规定,按他们原有的测试脚本,那你只能投降了。



    -------------------------------

    最后如果楼主只能改了,那也不算非常麻烦,spring 有个拦截器可以把 POST( "xxx/api", {"_method":"put"}) 转换识别为 put 请求,这样整体后端代码就不用改了。
    前端呢也可以将 http 工具再封装一下, 把其他 method 改成 post + _method 参数的方式。
    flyqie
        36
    flyqie  
       302 天前 via Android
    post + http code 200

    这是最稳的方案,restful 那一套在某些场合非常容易出你这种问题。。

    鬼知道他们会用什么奇奇怪怪的玩意。。
    zhangxh1023
        37
    zhangxh1023  
       302 天前
    如果你是作为乙方,帮甲方做项目,而安全是甲方提出的要求
    那么,改就完事儿了。没必要挣扎。
    或者说,你忽略掉《安全》这个词儿,就当成满足他们内部的规范。

    本质上和 rsa 换成 sm2 ,mysql 换成 达梦 之类的,没区别。
    baiyi
        38
    baiyi  
       302 天前
    @zpf124 #35 请问 restful 的作者是谁? http method 是 WebDAV 定义的吗?在哪个 RFC 文档里?
    zoharSoul
        39
    zoharSoul  
       302 天前   ❤️ 1
    让你 restful, 掉沟里了吧
    shyangs
        40
    shyangs  
       302 天前   ❤️ 1
    @dog82

    不遵從 RESTful 的人通常是實戰派的,比如你這次遇到的安全審計,你噴甲方或安全公司也沒用,他們也不會放你過。

    反而 RESTful 是從一篇博士論文出來的,學院派氣息濃厚。
    mdn
        41
    mdn  
       302 天前
    前端拦截非 POST ,在 request headers 里添加 x-method
    后端拦截处理 x-method
    restful 曲线救国
    flyqie
        42
    flyqie  
       302 天前 via Android
    @zoharSoul #39

    极少数情况下。

    get 和非 200 http code 也可能搞出来问题。。

    所以 post + http code 200 在某些场合下纯粹是不得已而为之。。
    iosyyy
        44
    iosyyy  
       302 天前   ❤️ 1
    @guilinxiaobing #6 实际上是 25 度的水和 25 度的 h2o
    ma836323493
        45
    ma836323493  
       302 天前
    在我看来 restful 规范 需要很多方的默契。 记得刚毕业的时候,完全遵照 restful , 前端不配合, 后来就改了,restful 确实不咋地, 我喜欢见明知意 的接口
    blackmirror
        46
    blackmirror  
       302 天前
    这不很好吗,明正言顺的直接全 POST
    LeegoYih
        47
    LeegoYih  
       302 天前   ❤️ 3
    我们集团很多项目都是 POST 梭哈的,HTTP Status 除了 200 401 500 其他都不用,公司项目能跑就行。
    见过项目用 RESTful ,经过多年迭代已经变成 POST 梭哈的形状了,有些接口命名很痛苦,比如消息撤回,驳回通过,审批通过这种。
    ytmsdy
        48
    ytmsdy  
       302 天前   ❤️ 3
    我 TMD 还碰到过说 443 端口有漏洞,然后领导让把 443 端口换成其他端口。
    刚刚开始我还怼了一下,架不住隔三岔五的过来说,我捏着鼻子给改了。
    shyangs
        49
    shyangs  
       302 天前
    RESTful, Lisp 這類學院派的東西,我通常用來寫學校作業,教授看了高興.

    公司真實業務就上 POST 、Java ,自己好招人,也免得遇到甲方找麻煩 平白無故多幾天加班為他們改.
    nullpoint007
        50
    nullpoint007  
       302 天前
    @ytmsdy 你这个是真的狠,https 默认端口都能改,哈哈
    cominghome
        51
    cominghome  
       302 天前
    让他说清楚为什么不安全,他要是说不明白就不给尾款
    zpf124
        52
    zpf124  
       302 天前   ❤️ 1
    @baiyi 这东西不是百度谷歌随便一搜就找得到么

    https://www.ruanyifeng.com/blog/2011/09/restful.html

    https://datatracker.ietf.org/doc/html/rfc4918


    restful 作者只是提了一个想法,但没有形成什么明确的规则协议,所以关于 restful 的细节大家各有各的理解,因为最初的作者就是论文里笼统一说,不像 graohQL 。

    而 WebDAV ,这玩意出现的不算太晚,但最初人家都是自己客户端和服务通信的,只是基于 http 协议了而已,这样不安客户端的用户也能查看,它和 gRPC 一样,属于特定领域在 http 上实现的私有协议。
    WEB 主流世界用不上他们这功能自然支持情况很差,尤其是后端,这是 spring 官方有我提到的那个拦截器的原因,因为在 restful 火起来的同时期的 tomca 7 吧还是 8 都还不支持 PUT 请求。
    akira
        53
    akira  
       302 天前
    你们自己花钱请的评审团队。。大哥,你这钱花的有点亏啊。。
    baiyi
        54
    baiyi  
       302 天前   ❤️ 1
    @zpf124 #52 看来你对 rest 有点理解,但不多
    dode
        55
    dode  
       302 天前
    PUT/Delete 和 POST 安全性上是一样的
    est
        56
    est  
       302 天前   ❤️ 17
    他说的不安全不是说「语意」不安全,也不是「业务」或者「设计」不安全,也不是资金不安全,也不是「架构」不安全,而是说:


    安全设备/日志分析/工具套件/网关盒子无法处理 GET/POST 之外的 http verb ,无法管控或者审计,所以不安全。
    wushenlun
        57
    wushenlun  
       302 天前 via Android
    这是对的,引擎支持的方法存在风险,比如 put 的 webshell 上传 ,除了语义不同基本上没区别
    QlanQ
        58
    QlanQ  
       302 天前
    又学到了
    我用 restful 只是为了路由好看
    不需要太多命名
    例如 /user/5 ,一个路径通过不同的 method 就可以实现多个功能
    如果都用 post 的话,就要好几个路径

    命名困难症
    lambdaq
        59
    lambdaq  
       302 天前   ❤️ 2
    > restful 是 作者发现人家 WebDAV 搞的这套 http method 很符合他的想法,所以复用(偷)了他们定义的 http method 而已,仅此而已,实际两者没什么关系。

    @zpf124 其实是反过来的。先是先 Roy Fielding 发明了一套「万物皆资源」的拍脑袋理论,然后有人拿「 unix 万物皆文件」给套出来一个 webdav 。参考 /t/867197
    est
        60
    est  
       302 天前   ❤️ 2
    /t/816040 结贴
    workshop
        61
    workshop  
       302 天前   ❤️ 2
    @Nazz put 和 delete 都不安全,因为它们可以往服务器上传文件,有某些著名的服务器配置不当,会留下漏洞,攻击者可以通过上传 webshell 来提权。而 put 本身如果服务器可以通过配置允许上传或者 delete ,就容易造成忽略,留下尾巴。
    workshop
        62
    workshop  
       302 天前
    put 和 delete 都不安全,因为它们可以往服务器上传文件,有某些著名的服务器配置不当,会留下漏洞,攻击者可以通过上传 webshell 来提权。而 put 本身如果服务器可以通过配置允许上传或者 delete ,就容易造成忽略,留下尾巴。但是如果你比较注意,用 put 和 delete 也没问题。
    victimsss
        63
    victimsss  
       302 天前
    https://github.com/moby/moby/issues/9015
    docker 甚至一大堆云原生的项目不是照样 restful
    mcfog
        65
    mcfog  
       302 天前
    POST /resource/:id?_method=DELETE
    框架或网关 rewrite 一下搞定
    BBCCBB
        66
    BBCCBB  
       302 天前
    POST 一把梭
    Features
        67
    Features  
       302 天前
    很多防火墙都是这样的,没啥奇怪的
    而且 update 用 put 的话,遇到数据包太大,浏览器类型的宿主环境会报错的,OP 没遇到过吗?

    我也是很不理解为啥非要用 restful
    est
        68
    est  
       302 天前
    @workshop put 和 delete 并不能拿来往服务器传文件。现代服务器就算你传了文件也无法执行。
    tiedan
        69
    tiedan  
       302 天前
    “老夫所有接口 post 一把梭”
    zpf124
        70
    zpf124  
       302 天前   ❤️ 1
    @baiyi 你说的对,还是你理解深入,给你点赞
    Nazz
        71
    Nazz  
       302 天前
    @workshop 服务器的问题 http method 不背锅. 本质都一样, $method / HTTP/1.1\r\n .
    kenvix
        72
    kenvix  
       302 天前
    有些地方合规要求就是这么奇怪,所以我现在已经不怎么用 RESTful 风格了,没必要为难自己,像 /admin/user/delete 把谓词放到路径结尾也没那么难看。
    TransAM
        73
    TransAM  
       302 天前 via Android
    这好办,让乙方把这条规则去掉,否则不付款。
    leeyuzhe
        74
    leeyuzhe  
       302 天前
    误解,ctmd ,之前刚被折腾过,怎么解释都不听
    sampeng
        75
    sampeng  
       302 天前 via iPhone
    最近也在做合规的事,只要是和合规相关,没得选。喜好屁股等被 x 就好
    sampeng
        76
    sampeng  
       302 天前 via iPhone   ❤️ 1
    上面都在讨论技术问题,lz 是外部安全外包团队出具安全评测报告的。所以这是不是一个技术问题,这是一个销售问题。人家合同里写必须要经过第三方 QA 检测通过你有什么办法
    Bromine0x23
        77
    Bromine0x23  
       302 天前
    出安全报告这种事怎么感觉闭着眼睛跑扫描器就能赚钱
    NX2023
        78
    NX2023  
       302 天前
    @datou 真的,我见过不允许 OPTION 的
    wanguorui123
        79
    wanguorui123  
       302 天前
    技术不行怪路不平
    tairan2006
        80
    tairan2006  
       302 天前   ❤️ 3
    乐了,还有人在讨论 restful API 的问题……

    所以你们没用过 k8s 或者 docker 的 http api 么,那不都是 restful 的……特别是 k8s ,PATCH 用的飞起,真是服了。
    infactory
        81
    infactory  
       302 天前
    在业务系统里用 restful 就没见过有善终的
    restful 里在中间件小项目里用用得了,真上规模的大项目用存粹是恶心前后端所有人
    wupher
        82
    wupher  
       302 天前
    1. 你去问问 ChatGPT 。
    mingl0280
        83
    mingl0280  
       302 天前 via Android
    ……讲真,这属于你们的安全 QA 水平太次了
    twl007
        84
    twl007  
       302 天前 via iPhone
    完了 AWS S3 的 API 岂不是也不安全

    可以建议安全 QA 去给 AWS 发个 ticket 建议只用 GET/POST 并且附上详细原因
    rbq123456
        85
    rbq123456  
       302 天前
    这又不是技术问题,只能改。我之前公司也是按照 restful 规范,但是移动那边说不行,只能改成 get 和 post 。你自己不是甲方,那你就只能改,只能忍。
    lishoujun
        86
    lishoujun  
       302 天前
    RFC 9110 HTTP Semantics
    只有魔法才能打败魔法,告诉对方,我们是严格按照国际标准开发的。

    我没有找到 gb 标准,如果能找到对应的 gb 标准,说服力更强。
    lesismal
        87
    lesismal  
       302 天前   ❤️ 2
    @Nazz
    TCP 握手和断开、HTTP1.0 和 2.0 、Restful 、Actor 、函数式编程、设计模式。。。
    这一大堆玩意的主要内容没一个好东西,都是垃圾
    OutOfMemoryError
        88
    OutOfMemoryError  
       302 天前   ❤️ 1
    我们甲方爸爸是省级联通,在某个项目的第一轮安全外包测试结果里面有提到过这个,说不安全,会删除/移动/修改资源啥的。。。
    但是没办法 我们应用设计的时候就已经用了其他的 METHOD ,只好在 NGINX 层做了一次方法转换, 然后在 spring 里面做了支持
    if ($uri ~* "/(GET|POST|PUT|DELETE)/$") {
    set $param_method $1;
    }

    add_header X-HTTP-Method-Override $param_method;


    然后对应后端处理一下
    https://gist.github.com/Zerek-Cheng/b6cc7a92a3ac64e6be852d1cb089e64b
    lesismal
        89
    lesismal  
       302 天前
    @Nazz 之前的帖子喷了不少,浪费时间,这个帖子我不继续回复了
    https://www.v2ex.com/t/816040#reply90
    https://www.v2ex.com/t/816040?p=2#L151
    Jtyczc
        90
    Jtyczc  
       302 天前 via Android
    两年前就是 post 一把梭了,公司项目都是 post ,反正我来打工的,老板想怎么样就怎么样,如果前面是坑照样踩,出了问题也不是我们背锅。
    leeg810312
        91
    leeg810312  
       301 天前 via Android   ❤️ 1
    这个第三方公司和楼上好多都是什么三流公司?我做内部项目还是客户项目,安全检查从没有遇到过不能用 put 和 delete 的情况,还漏洞呢,都是什么年代的上古漏洞?
    yagamil
        92
    yagamil  
       301 天前
    会不会甲方只会 POST ,GET ,其他的认为多余且危险?
    yagamil
        93
    yagamil  
       301 天前
    @Jtyczc 如果有首页的,浏览器怎么打开首页?
    Slurp
        94
    Slurp  
       301 天前   ❤️ 5
    @lesismal 😁 TCP 、HTTP 、RESTful 、Actor 、FP 、设计模式 AOE 个遍的还是第一次见,翻了一下喜欢 if err 喜欢 Go ,怕不是经典大道至简…… 看到 Go 社区都是这种 b 人我就放心了。
    james122333
        95
    james122333  
       301 天前 via Android   ❤️ 1
    @ytmsdy

    这个大概是因为 1024 以下要 root 权限 webserver 如果有问题会悲据 可能会转发或不用了
    james122333
        96
    james122333  
       301 天前 via Android
    我一开始都是只用两个 method
    resource 区分 后来知道 restful 也很少用 restful
    基本没不同 如果 webserver 没问题
    webdav 我不喜欢这东西 新增 method 可以 但 xml 格式不能忍
    xiadong1994
        97
    xiadong1994  
       301 天前
    要吃弱智的饭,就不要嫌弱智傻。如果不吃,就把弱智踹开。
    james122333
        98
    james122333  
       301 天前 via Android
    尤其维护某专案 webdav 我都快累死了
    shyangs
        99
    shyangs  
       301 天前   ❤️ 2
    @leeg810312

    是三流公司 阿里巴巴 旗下淘寶

    documentzhangx66
        100
    documentzhangx66  
       301 天前   ❤️ 3
    防黑有两个层次:理论防黑与实践防黑。楼主说的这个问题,属于后者。

    也就是说,如果大家都遵守规范去做,这玩意其实是不会有安全问题的。但实践中我们发现,很多人为了偷懒,为了高效率,根本不会按规范去做,才导致了这些问题。

    类似的问题还有偷懒了没把控制命令与数据分开的 SQL 注入漏洞、脚本注入漏洞;

    偷懒没规划权限与加密的早期版本的 Windows 的共享 SAMBA 、FTP 、HTTP 等等。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1633 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:56 · PVG 00:56 · LAX 09:56 · JFK 12:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.