您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

因为安全问题,最终还是放弃了Rest!

时间:2023-09-26 14:24:14  来源:今日头条  作者:迷路的架构师

Rest介绍

REST(Representational State Transfer)是一种软件架构风格,用于设计网络服务和API。它是由Roy Fielding在他的博士论文中提出,并成为HTTP协议的基石之一。

REST基于以下几个主要原则:

  1. 资源(Resources):将系统中的每个实体(如用户、产品、订单等)都视为一个资源,每个资源可以通过唯一的标识符进行访问。
  2. 统一接口(Uniform Interface):使用统一的接口来处理资源,包括使用HTTP动词(GET、POST、PUT、DELETE等)进行操作,并通过URI(资源标识符)来定位资源。
  3. 无状态(Stateless):服务器不会存储客户端的状态信息,每个请求都应该包含足够的信息以完成请求处理。
  4. 按需响应(Response on Demand):服务器按照客户端请求的内容返回相应的数据,可以是html、JSON、XML等格式。
  5. 可缓存性(Caching):对于可缓存的响应,客户端可以缓存结果以提高性能和减少对服务器的请求。

Rest示例

下面是一个简单的REST示例,以管理用户资源为例:

  1. 获取用户列表:发送GET请求来获取所有用户信息。
GET /users
  1. 获取特定用户:发送GET请求来获取特定用户的详细信息。使用用户ID作为路径参数。
GET /users/{user_id}
  1. 创建用户:发送POST请求来创建新用户。请求体中包含新用户的信息。
POST /users

Request Body:
{
  "name": "John Doe",
  "emAIl": "johndoe@example.com",
  "age": 25
}
  1. 更新用户:发送PUT请求来更新特定用户的信息。使用用户ID作为路径参数,并在请求体中包含更新后的用户信息。
PUT /users/{user_id}

Request Body:
{
  "name": "Jane Smith",
  "email": "janesmith@example.com",
  "age": 30
}
  1. 删除用户:发送DELETE请求来删除特定用户。使用用户ID作为路径参数。
DELETE /users/{user_id}

Rest优点

用了这么多年 Rest,总结几个优点(从上述示例也可以看出)。

  • Rest 具备规范性,GET/POST/PUT/DELETE 分别代表 获取/创建/修改/删除 操作。
  • Rest 表意明确,可读性强,代码清晰。
  • GET/PUT/DELETE 都是幂等的,若操作失败,可以进行重试,确保资源的一致性。一些框架可以基于此特性做一些重试机制。

但是最近的一系列安全问题,最终我们放弃了Rest。

安全问题

由于我们是 ToG 行业,没有什么比安全更大的问题,任何技术的先进性在安全性面前都不值得一提。以下是着重碰到的安全问题:

  1. 国产安全软件(深信服等)将 PUT/DELETE 直接定性为非法请求,所有的此类请求都需要修改成 POST。以前的方案是我们在前端统一将 PUT/DELETE 改成 POST,在 HEADER 中将原始请求类型作为参数带到请求中,后端网关层统一将 POST 转为原始请求转发到对应的服务(前端和后端基本都不用改)。
  2. 暴力遍历问题。如 GET /users/{user_id} ,不法分子可以使用下述请求暴力获取数据,存在安全隐患。最近碰到个银行系统,必须要整改!!
GET /users/1
GET /users/2
GET /users/3
GET /users/...
GET /users/n
  1. 数据越权问题。前端请求 token 与请求参数代表的用户不一致,如 token 代表是 A 用户,但实际请求的 GET /order/{order_id} 中 order_id 是 B/C/D/E/.../N 用户的,存在数据越权访问。必须整改!!!
  2. 请求明文问题。用 GET 请求在参数中都是明文传输,直接可以通过浏览器 F12 就能看到请求参数,不安全!!!

解决方案

将所有请求都改成 POST ,请求参数放在 Body 中,前端做一层简单的签名和加密。F12看不出来、安全工具也扫不出来,万事大吉!!



Tags:Rest   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
构建 Web API 的两种流行选择:REST vs GraphQL
在 RESTful 和 GraphQL API 之间的选择取决于您的具体用例。RESTful API 适用于需要高可伸缩性的简单应用程序,而 GraphQL 则适用于具有不同数据需求的复杂应用程序。简介RES...【详细内容】
2024-01-09  Search: Rest  点击:(63)  评论:(0)  加入收藏
构建强大REST API的十个最佳实践
在项目开发中,我们经常会使用REST风格进行API的定义,这篇文章为大家提供10条在使用REST API时的最佳实践。希望能够为你带来灵感和帮助。1、使用具体且有意义的资源名称选择能...【详细内容】
2023-12-06  Search: Rest  点击:(149)  评论:(0)  加入收藏
事件驱动架构 vs. RESTful架构:通信模式对比与选择
1. 通信风格事件驱动架构(EDA) 是一种异步通信风格,组件之间通过产生和消费事件进行通信。事件是表示系统中重大变化或事件的消息,并分发给感兴趣的组件。这种通信模型允许系统...【详细内容】
2023-12-05  Search: Rest  点击:(137)  评论:(0)  加入收藏
快速创建高效REST API的十个要点解析
1 使用描述性和有意义的资源名称选择准确表示所代表实体的资源名称,不使用泛泛或模糊的名称。2 正确使用 HTTP 方法针对不同的操作使用适当的 HTTP 方法(GET、POST、PUT、DELE...【详细内容】
2023-11-20  Search: Rest  点击:(182)  评论:(0)  加入收藏
Spring Boot外部接口调用:使用RestTemplate与WebClient操控HTTP
在Spring Boot中调用外部接口的方式有多种,其中最常用的是使用RestTemplate或者WebClient。以下是一种使用RestTemplate的示例,包含了详细的描述和实例源代码:步骤 1: 添加依赖...【详细内容】
2023-11-16  Search: Rest  点击:(27)  评论:(0)  加入收藏
如何选择 REST 还是 GraphQL
在本文中,简单比较 REST 和 GraphQL 的优点和缺点,以便您可以决定哪种 API 架构最适合您的项目当我们要创建数据驱动的 Web 或移动应用程序,需要开发后台 API,通过它可以从后端...【详细内容】
2023-10-25  Search: Rest  点击:(154)  评论:(0)  加入收藏
Forrester发布2023年十大云计算趋势
Forrester最近发布的一份报告揭示了将会在明年撼动云计算行业的十大发展趋势。随着围绕人工智能、数字主权法规和专业化行业解决方案的重大技术转变,这些趋势描绘出了一副日...【详细内容】
2023-10-11  Search: Rest  点击:(93)  评论:(0)  加入收藏
因为安全问题,最终还是放弃了Rest!
Rest介绍REST(Representational State Transfer)是一种软件架构风格,用于设计网络服务和API。它是由Roy Fielding在他的博士论文中提出,并成为HTTP协议的基石之一。REST基于以下...【详细内容】
2023-09-26  Search: Rest  点击:(184)  评论:(0)  加入收藏
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。我之前的HTTP开发是用apache的Htt...【详细内容】
2023-09-14  Search: Rest  点击:(315)  评论:(0)  加入收藏
apigateway技术选型必须要考虑的技术之一OpenResty
openrestyOpenResty介绍OpenResty 是一个基于 Nginx 服务器的全功能 Web 应用服务器,它集成了大量的第三方模块,提供了更丰富的功能和性能优化。OpenResty 的核心是由 Nginx...【详细内容】
2023-08-12  Search: Rest  点击:(209)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(11)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(9)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条