首页 新闻 搜索 专区 学院

为什么说HTTP的PUT自身不带验证机制,任何人都可以上传,有安全问题

0
悬赏园豆:30 [已解决问题] 解决于 2017-09-20 21:49

在看 《图解HTTP》的时候,发现在2.5中说到:

鉴于HTTP/1.1 的PUT方法自身不带验证机制,任何人都可以上传,有安全问题,一般网站都不使用该方法。

 

我想知道:

PUT方法自身不带验证机制,怎么理解,POST/GET方法就有验证机制了吗?是怎么保证安全的?

 

苍枫露雨的主页 苍枫露雨 | 小虾三级 | 园豆:1027
提问于:2017-09-19 22:43
< >
分享
最佳答案
1

一直很喜欢图解系列的书,作为科普入门很好,没想到居然有这样明显的低级错误。建议参考RFC7230-7235,这是http的一手资料,其次HTTP权威指南。

另外put也不是传文件用的,错的太离谱了。

收获园豆:20
blackheart | 老鸟四级 |园豆:3504 | 2017-09-20 07:39

能具体的说一下吗?

苍枫露雨 | 园豆:1027 (小虾三级) | 2017-09-20 10:27

@苍枫露雨: 说什么?验证还是put?

blackheart | 园豆:3504 (老鸟四级) | 2017-09-20 10:29

@Blackheart: 

说一下PUT的安全问题,为什么就不安全了,按照@幻天芒的说法,HTTP请求自身都没有验证机制,那为什么web容器,如tomcat7,禁止PUT,不禁止GET,POST等呢,

苍枫露雨 | 园豆:1027 (小虾三级) | 2017-09-20 10:53

@苍枫露雨:

密码学方面的安全问题是由HTTPS来保证的,另外http有authentication的reqeust header来提供授权的问题。这个层面的安全和http method是没有关系的。

HTTP协议层面的安全其实指的是语义上安全(即这个操作不会产生副作用),另外一个语义是幂等性。从这个层面来说,PUT是不安全的,因为put的语义是整体替换或者创建新资源,会产生副作用;但是它是幂等的,执行一次和n次的结果是一样的。

另外,你提到的验证应该是属于e-tag这类的验证吧,属于标识资源有没有修改,是否可缓存相关的验证,和安全无关。

blackheart | 园豆:3504 (老鸟四级) | 2017-09-20 11:08

@Blackheart: 

谢谢你的回答,让我对http有了更清晰的认识,

但是为什么web容器禁止了PUT没有禁止POST还是有疑问,POST在语义上也是不安全的吧,

苍枫露雨 | 园豆:1027 (小虾三级) | 2017-09-20 11:33

@苍枫露雨: 

是的,POST在HTTP层面属于不安全且不幂等的语义。

因为早期的时候http主要是配合html使用的,html中的form早期只支持get,post,所以put一直没有出现在实际使用中。现在有些已经浏览器已经允许html的from使用PUT和DELETE了,AJAX则是很早很早就支持PUT和DELETE了。

 

blackheart | 园豆:3504 (老鸟四级) | 2017-09-20 11:40
其他回答(2)
0

刚翻书确认了下,原文之后还有一句,实际上内容没有什么问题。至于验证机制,HTTP请求都没有,需要配合你的web程序进行验证。

收获园豆:10
幻天芒 | 园豆:36662 (高人七级) | 2017-09-20 08:46

那为什么web容器,如tomcat7,禁止PUT,不禁止GET,POST等呢,

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-09-20 10:15

@苍枫露雨: tomcat不熟,反正我是没见过,哪儿禁止PUT了。

支持(0) 反对(0) 幻天芒 | 园豆:36662 (高人七级) | 2017-09-20 13:22

@幻天芒: 

我是用tomcat7 测试的,  构造了一个put请求,返回403,

也不是完全禁用,可以配置的,

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-09-20 17:31

@苍枫露雨: 这个得看配置和你的程序处理的。我这边使用rest,这些都是可用的。

支持(0) 反对(0) 幻天芒 | 园豆:36662 (高人七级) | 2017-09-20 17:43
0

http本身就是脸盲,他不能存储用户的状态信息,所以需要cookie机制去识别。

猎人博客园 | 园豆:206 (菜鸟二级) | 2017-09-20 11:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册