被客户告知 HTTP 的 PUT 请求不安全,甩锅给我们要求整改

2021-11-17 14:17:10 +08:00
 TossPig
真的是要吐,这段时间好几个客户单位反馈业务系统无法使用,一直报错

上去一看,PUT 请求全部被拦截,也不知道家防火墙商干的好事,默认把 PUT 请求全部给禁了,还给客户培训说 PUT 请求就是不安全

给客户解释了半天,根本不听,就说防火墙这样设置肯定有他的道理,说是我们使用了不安全的请求方法,要我们负责安全整改

全站遵循 RESTful 设计的呀~简直要疯了~也不知道哪个 wbd 做的默认规则
25082 次点击
所在节点    程序员
214 条回复
skinny
2021-11-18 21:58:29 +08:00
楼主好惨,遇到这种奇葩的半吊子安全专员……帖子里也一堆这种专员……
hack
2021-11-18 22:08:33 +08:00
一句安全压天下,谁人不识安全厂商大忽悠
lululau
2021-11-18 22:09:17 +08:00
全给 tama 改成 GET 啊
guanhui07
2021-11-18 22:10:44 +08:00
post 把
iseki
2021-11-18 22:15:00 +08:00
甲方脑残,不过为了赚钱倒也可以迂回下,搞个 http over http 就好了。还可以宣传一波自带混淆,顺便多要点💰
TossPig
2021-11-18 22:21:11 +08:00
@lesismal

> 抛开 RESTFul 不谈,我前面提到的三元 /三个维度的问题,其实 post delete 的方法在路由上就搞定了比如 /aaa/bbb/delete ,但是路由上做可以省去 Method 的不统一和比如这次聊到的 PUT 的问题

我们的理解可能不太相同

为什么要抛开 restful?至少我还没找到一种在 web api 设计中更优的最佳实践

你看了半天,也没找到你前面提的三元问题

至于说“省去 Method 的不统一”,其实你自己的举例中也在路由中,补入了一个 delete
难道我的
/user?ids=aaa,bbb
method delete
就没统一描述 /user 这个资源?

我在脑子里做了,想象中你的方案的落地,没找到比 restful 的优点

反而感觉像放弃了,http 协议做为应用层协议的优势,感觉上你在把 http 当 tcp 来玩
iseki
2021-11-18 22:21:56 +08:00
@lesismal
把动词放到路由上基本都会遇到名词和动词混淆的问题,这个很恶心;
符合 RESTful 的设计更加便于理解,虽然私有 API 可以依靠完善的文档来弥补;
至于你说 POST200 更省资源这就有点扯了,都 application/json 你跟我说省资源???
lesismal
2021-11-18 22:27:59 +08:00
@iseki
> 至于你说 POST200 更省资源这就有点扯了,都 application/json 你跟我说省资源???

我没太懂,"我说省资源",是指我在哪一楼的来着,我全页面搜了下这个帖子里只搜到你这一楼“省资源”这几个字了
lesismal
2021-11-18 22:31:56 +08:00
@TossPig

> 看了半天,也没找到你前面提的三元问题

"Method + 路由 + 参数"

#86 #88 网页回复,没编辑那么细致,之前没叫三元

另外,我自己项目和熟悉的朋友的项目里,oost + struct body 挺多的,restful 的反倒没怎么见到
xmh51
2021-11-18 22:34:20 +08:00
不知道为啥吵吵。。 其实就一个点,内网机器,看和甲方沟通场景,面向公网的,没得说,只能 get post ,鬼知道客户会用啥子防火墙。这个就和 User-Agen 一样了,有历史背景。
lesismal
2021-11-18 22:38:16 +08:00
@skinny @hack

我在这个帖子里对于 PUT 的观点包括几个方面:
1. 安全规避以及替代成本不高
2. 与其他方案对比的优劣
3. 工程、跨工种 /部门 /公司协作

前面回复的太多了,这会也快睡觉的时间了,就不挨个楼去整理了

我前面还说过好些人断章取义,望文生义、无论据式口嗨、看都没看懂上来就怼,你们对待技术真是够随便的,我得庆幸还有很多不随便的人。
iseki
2021-11-18 22:40:29 +08:00
@lesismal 抱歉,这个是我看串了,你没说这个省资源,你说这个省心智负担。
我倒是觉得复杂度是不会降低的,只是在不同的形式间转换,现在流行的 RESTful 风格借助 HTTP 动词表达的语义,你用 RPC 风格一样要 CreateXxx UpdateXxx 。只是前者和 HTTP 结合的更好,也更容易被生态接受罢了。
权衡利弊,现阶段 PUT 都会出问题的系统基本上很少见了,个人认为大多数情况下拆掉这些过时的规则没什么问题。
lesismal
2021-11-18 22:40:46 +08:00
@xfriday 是的呀,怎么了,我也是被你们各位上来就口嗨给逼的呀,只能这种戏谑点方式和心态防止自己被气坏啊,所以请多理解,而且对认真聊技术的人我可是没这样说话的呀。。
lesismal
2021-11-18 22:44:08 +08:00
@iseki 嗯嗯,能保系统是第一位的,其他的慢慢演进吧,每个团队每个人都有自己的设计审美,而且是否流行与是否主流与是否优雅也通常不是绝对正相关的,大家能赚钱、能有朝一日全民不卷就好。
lesismal
2021-11-18 22:46:50 +08:00
辛苦攒的 v 币,今天消耗了太多,怀疑一些层主上来就口嗨是过来骗我 v 币的,真是坏得很呢。
这个帖子不想再扯了,睡觉了,晚安各位。
TossPig
2021-11-18 22:48:32 +08:00
@lesismal

认真看了#88 突然有种恍然大悟的感觉

web 其实提供了这么一套方案,叫 websocket 。只有一个方法 get ,初始化 token 通过 header 传输
然后,,,嗯,,,,[狂笑]
对比 http 那 9 种方法有诸多优势,及时性,有状态,可以发送 binaryType
iseki
2021-11-18 23:19:15 +08:00
@TossPig HaHa ,其实我一直想尝试下 JSONRPC over Websocket 的,但迫于这东西不管是穿 CDN 还是生态和缓存都有缺点
kaneg
2021-11-18 23:24:40 +08:00
能用 POST 不让用 PUT 就是掩耳盗铃
0Vincent0Zhang0
2021-11-18 23:35:43 +08:00
甲方就是这样的了,客户还说 80 端口不安全,要用 443 端口,只懂关心端口号,不关心走的是什么协议 [doge]
lesismal
2021-11-18 23:49:10 +08:00
@TossPig @iseki
刚洗完澡头发还没干,所以又来补一波。。。

其实相比于 RESTFull ,post+struct body 方式的路由也好、参数也好(甚至路由也放到 body struct 字段里,但是比如 nginx 日志之类的不友好、需要插件解码再日志才行),更统一,比如参数,不需要再去 header 的 kv 、form 或者 body 各种地方取,而且写法上,以 go 语言为例,一个 ctx.Bind(&args),后续的参数就都可以是结构体字段,干净得很。有的人喜欢省事用 map 类型,然后取到 interface{}再解析,这种不推荐,理由跟强弱类型语言做工程的优劣类似,而且项目足够规范,就应该协议制定阶段定好类型,然后就都很规范干净。当然,不同语言,强类型、弱类型、还有 java 这种带注解的,对于这种方式参数使用的便利未必一样。但至少在 go 和其他一些语言领域,或者从设计、获取参数来源上,确实是简便了一些的。而且 RESTFull 多种方法相关的,我前面说路由命名一样能解决,RPC 也一样的道理,如果命名解决不了,那 RESTFul 也未必能解决的了、只是增加一个维度的复杂度而已。

一些传统业务,社区已经既有很多成熟的解决方案,比如企业级、电商、管理后台系列、金融相关的很多,还有一些语言优势领域比如 PHP ROR 各种擅长的中小项目领域,这些成型的成熟方案改造使用 post+struct body 没什么必要,或者像楼主这种,公司已经形成了比较统一的项目规范,改个另类出来反倒增加团队负担,也没必要。
但是近年的一些新项目,尤其 go 语言这种,因为没有历史包袱,主流的框架以及相对中等以上水平的团队,很多都会选择 post+struct body 的方式。所以之前其他楼一些同学说我应该跟上时代,我都觉得他们有点说反了,可能他们才是没跟上时代吧 :joy:

另外关于 websocket ,我这有个 go 的 rpc 框架,支持 websocket 作为 transport 层,而且不只是 rpc ,可以服务端主动发消息给客户端,可以避免线头阻塞,可以乱序响应,而且能够支持更多业务场景比如推送、IM 、游戏等等:
github.com/lesismal/arpc

go 的 rpc 框架里,性能我不敢吹第一,但哪个框架说它第一的话我也不服。。。这有一份相对客观公正的 go rpc benchmark:
github.com/micro-svc/go-rpc-framework-benchmark

这里有个 websocket 聊天的简单例子:
github.com/lesismal/arpc/tree/master/examples/webchat

如果各位有兴趣玩 go ,欢迎多多交流

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/816040

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX