yaofly2012 / note

Personal blog
https://github.com/yaofly2012/note/issues
44 stars 5 forks source link

信安不让暴露PUT和DELETE接口 #238

Open yaofly2012 opened 3 years ago

yaofly2012 commented 3 years ago

背景

信安要求所有接口不得支持PUT/DELETE(称它们是不安全的HTTP方法)。排查发现还真的有些PUT接口。

  1. 为什么要使用PUT接口?
  2. 为什么信安不让暴露PUT和DELETE接口?

为什么要使用PUT接口?

  1. HTTP 语义:最初用于文件管理的操作。
  2. RESTfull(Representational State Transfer,表述状态转移) API约束条件和原则,即URL定位资源,HTTP动词描述操作

为什么信安不让暴露PUT和DELETE接口?

从开发的角度看:PUTDELETE只是决定匹配服务的哪些接口,并没有什么安全问题,它们和GET/POST只是语义上的差异。 从网络组的角度看:PUTDELETE最初用于文件管理的操作,有些Web服务器依旧在支持,可能会导致修改删除Web无服务上的文件。

参考

  1. StackExchange: How to exploit HTTP Methods
  2. 关于http的PUT、DELETE等方法到底安不安全的讨论
  3. 为什么要用Put/Delete接口:Restful API简介
  4. 花五分钟看这篇之前,你才发现你不懂RESTful
yaofly2012 commented 3 years ago

Rest和Restful API

Rest(Representational State Transfer,表述状态转移)是什么?

  1. 是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。

  2. 符合这些约束条件和原则框架的API就是Restful API。

简单地总结这些约束条件和原则就是URL定位资源,HTTP动词描述操作。即Rest对Web资源提供了统一描述方式。

约束条件和原则

  1. URL和资源
  2. HTTP method和资源操作
  3. 状态和转移

    Rest是无状态通信的,每一次请求都看作是全新的请求,是不会存在JSESSIONID这样的Cookie的。

    • 服务端只维护资源状态,并不关心客户端的状态(不会保存session);
    • 客户端才维护应用状态,所以状态转移指的是客户端的状态转移。

Rest API只负责验证登录态,如果需要登录则由客户端触发SSO登录。

JWT(JSON Web Token)认证和授权 ?

参考

  1. 为什么要用Put/Delete接口:Restful API简介
  2. 花五分钟看这篇之前,你才发现你不懂RESTful
  3. JSON Web Token 入门教程
  4. 知乎:不要用JWT替代session管理(上):全面了解Token,JWT,OAuth,SAML,SSO