REST API 安全问题

2019-01-21 13:56:34 +08:00
 gzf6

楼主是做前端的,现在学着用 koa2 写 api 服务器,公司的后端接口一般都设计为 get 或 post 方法,很少用 put 或 delete 方法,想请教下,这两个方法有什么安全上的问题吗?

10482 次点击
所在节点    程序员
82 条回复
wenzhoou
2019-01-21 15:12:57 +08:00
@Cbdy Head 是简单请求。put 不是简单请求,这不符合语义吗?
H3x
2019-01-21 15:13:55 +08:00
方法本身是没有问题的,但是容易被误用,导致产生安全问题。
基于这个情况很多市面上的 waf 产品都是禁用 put delete 等方法的,这变相的导致用的人更少了。
gzf6
2019-01-21 15:13:56 +08:00
@learnshare 同感,因为后端处理数据前还要进行数据验证,HTTP method 只不过发送了请求和参数
no1xsyzy
2019-01-21 15:38:06 +08:00
@mozutaba 吹 RESTful 的不是语义网的那群吗?(换句话说是吹 AI 的人)
FrankFang128
2019-01-21 15:39:18 +08:00
@Cbdy 这跟安全有啥关系。
FrankFang128
2019-01-21 15:50:04 +08:00
楼上大部分的观点不就是:因为有些傻逼软件这么做,所以为了『安全』(实际上是兼容)我们也学傻逼吧。

我的观点:

1. 一定要指只用 get post 是迁就傻逼的做法,不是对的做法
2. 不是为了安全,是为了兼容。要安全请上 HTTPS
NoKey
2019-01-21 15:50:55 +08:00
我不知道是不是所有版本,反正部分版本的 tomcat,要支持 put 等,需要修改配置
很多项目早些时候就运行起来了,tomcat 的配置是能不动就不动,免得动了出问题呢。。。
然后就是部分浏览器版本,不支持 put 等
然后呢,put 又不是必须的,可以被替代的
除非是新项目,新运行环境,然后项目负责人又比较新潮
不然,很多不会用的
话说,之前遇到一个甲方,看到 rest ful 风格的请求 uri,说你们这是什么鬼,改了!
specita
2019-01-21 15:57:34 +08:00
想我当初刚来这个公司,写 API 文档用的就是 restful 的语义,几十个接口写了几天,然后给前端看,前端直接问我什么是 delete,什么是 put,怎么调用,他折腾半天之后告诉我他们的框架只支持 get 和 post,当时心里一万个草泥马。 但是没办法,初来乍到,硬着头皮把接口方法改回 post 了
Lonely
2019-01-21 15:58:59 +08:00
@FrankFang128 #2 你是受刺激了,上来就喷?
Cbdy
2019-01-21 16:02:03 +08:00
@FrankFang128 服务端有一个 GET 请求(简单请求)的接口,浏览器可以直接用 XHR 或者 fetch 跨域访问(少一次预检( OPTIONS )),如果这个请求是 PUT、PATCH 等,这个请求可以在预检阶段就拦下来,避免跨域请求对服务器的产生未预期的影响。这本身是 HTTP 协议安全的一部分
mrbeannnnn
2019-01-21 16:16:45 +08:00
@FrankFang128 因为历史的安全原因,put,delete 操作服务器上的文件导致成功入侵。详情百度 IIS6 put 漏洞
lolizeppelin
2019-01-21 16:25:17 +08:00
method 对 http 服务器来说只是一个字段,具体怎么处理看你 http 服务里的代码里怎么写 然后再到业务代码处理

这些你只要完整的看过一遍 http 服务代码就懂了

至于前端什么的不支持 put 和 get 也是没关系的,标准的 http 服务框架代码都支持 method 重定向
jonahtan
2019-01-21 16:29:25 +08:00
@specita 哈哈哈,我把接口 docs 拿给前端小伙伴,那小伙儿也是说你没事别瞎整行不大哥。post get 满足不了你了是不?
吓的我赶紧整改。
lolizeppelin
2019-01-21 16:31:30 +08:00
@mrbeannnnn

method 只是个规范 不涉及任何安全问题 安全问题存在于实现代码中

iis6 有问题也是 iis6 自己的 http 实现有问题
他代码里的的 put delete 相关代码有问题不带表 put delete 本身有安全问题
lolizeppelin
2019-01-21 16:34:55 +08:00
@Cbdy

安全行为是浏览器实现的,有用但是靠不住的

限制只能靠后端自己, so.....
ranwu
2019-01-21 16:49:20 +08:00
全栈就没这些问题,想怎么做就怎么做[:smirk:]
ichou
2019-01-21 16:53:34 +08:00
其实我一直不太理解为什么为什么大家一直喜欢追着 RESTful 怼,RESTful 只一种是设计风格又不是标准,不同的框架里的实现方式都尚且是有差别的,更别说到了具体的环境具体的人

1. 因为有过不愉快经历就对 REST 过份怨念的朋友,如果您是在认真研究过 REST 并且在生产项目上实施过之后得出的结论,我尊重您;如果不是,请收起你那份『老子不用的,就是垃圾』的莫名优越感
2. 对于那些你觉得『假装 REST 』的项目,没必要苛求,因为他们可能也是因为团队、环境的各种阻力才做出了妥协,但至少,他们是想要遵照这一风格的,没毛病
3. 我喜欢 REST,因为它和 OOP 一起可以让整个项目的结构足够清晰,看一眼路由表就能大概了解整个系统的架构
4. RESTful 是一种风格,到目前为止我不知道有哪一种实现可以称得上最佳实践。记得几年前听金数据创始人陈金洲的一个分享,那个时候我所在的团队已经用了好几年 REST 了,觉得 REST 就是我们用的那样,听完之后才知道,我们用的是个屁,stay hungry stay foolish
jorneyr
2019-01-21 18:13:37 +08:00
HTTPS + token(放 header 或者 cookie 里)
firebroo
2019-01-21 18:46:56 +08:00
和安全没有关系。
mmmfj
2019-01-21 19:16:40 +08:00
请求用的方法和安全无关

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

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

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

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

© 2021 V2EX