首先,本文所说的HTTP方法的安全性是RFC 7231规范中定义的一种方法公共属性,它并不是说能够防止外部的攻击,而是一种语义。
什么是HTTP方法的安全性?
HTTP方法的安全性是HTTP方法的一种属性,并不代表“安全”的方法就不会遭受外部的攻击,这种“安全”针对的是服务器上的资源。
一般的,请发方法对服务器上的资源是只读的,我们就认为这种方法就是安全的。
哪些方法是安全的
RFC7231规范中定义了HTTP协议支持的8个标准方法,分别为GET,HEAD,POST,OPTIONS,PUT,DELETE,CONNECT,TRACE。
注意还有一个常见的方法PATCH,此方法不在RFC7231中,是RFC5798中的。
其中,GET,HEAD,OPTIONS和TRACE是安全的方法。
为什么这5种方法是安全的,因为从语义规范上将,它们只从服务器上获取资源或查询一些状态,它们是只读的。
例如GET,一般情况下只从服务器中获取资源,是一个“只读”方法。
这些被定义为安全的方法一定是安全的吗
再次强调一下,HTTP协议是一种协议,协议本质是一种约定,那么既然是约定,我们也可以不遵守约定,如果我们不遵守约定,谁也不能怎么滴。尽管GET,HEAD,OPTIONS和TRACE被定义为安全方法,我们仍然能够使用它们删除服务器上的资源,只要我们支持这样做。
但是,协议也是一种约束,我们还是有必要遵守的。按规矩办事永远没错。
安全性与幂等性
安全的方法一定是具有幂等性的。