GeekTop
  • 首页
  • 关于

GeekTop

不止代码

API安全设计

API安全设计

2020年7月31日 Alex Comments 0 Comment

谈到API设计的安全,主要从方面来讲。一个是编码层面,还有就是运维层面。这里主要考虑编码层面。

横向越权

对于REST API来讲,如果没有做好权限控制,很容易发生横向越权的问题。

比如,用户要请求一个资源 GET http://xx.com/api/orders/123,很容易猜到123应该是系统存储的订单ID,那么这个时候可以想:124是否是一个有效的订单ID?但是这个好想不是我的订单ID,我是否可以取下来看看🤔?

这个时候,如果没有同级的权限控制,很容易越权访问其它用户的订单。

如何解决这个问题?首先,敏感的信息不应该使用这种整型ID的方式来访问,应该对其进行加密或者使用UUID来进行访问。

不要在URL中拼接token等机密信息

token等机密信息最好放在请求的header中,因为一般情况下,拼接在URL中的内容都会记录在网关的日志里,如果日志泄漏,或者被别有用心的人利用,就有可能造成用户信息的泄漏。

考虑在API中加入时间戳

每次请求都加上时间戳,服务端收到请求后比对时间,如果相差超过一定的时间就拒绝提供服务。在一定程度上可以避免DDOS攻击。

考虑加入签名机制

引入签名,主要是基于参数合法性的考虑。

可以使用MD5或者SHA摘要算法对输入的参数进行计算,计算后得到一个sign,服务端收到请求后会重新按照相同的方法进行计算,如果两次计算的结果不一样,则说明请求被篡改过,此时应该拒绝服务。

对于更改资源状态的请求应该拒绝重复调用,此时可以缓存sign,如果收到相同的sign,则考虑决绝提供服务。

验证输入参数的有效性

参数的有效性,每个框架做法不太一样。Spring可以通过hibernate提供的验证机制,可以对传入的DTO和保存的model进行验证。Rails在保存的时候可以有回调取验证。

使用HTTPS

其它事情做的多好,但是只要传输过程数据有可能被窃取,这时候数据仍然是不安全的,所以,应该尽可能的使用https服务。

妥善保存用户的密码

不建议使用md5处理用户的密码。本质上,md5不属于加密算法,只是一种摘要算法。
可以参考之前的文章:用户密码的存储策略


参考文章:

  • REST API 安全设计指南

  • open-api-security

  • 设计 API 时,如何保证 API 的安全性(摘要算法、加密算法)

  • REST API安全基础知识

  • REST API 安全设计指南

  • REST API 安全设计

  • API接口安全性设计

  • 阿里大师带你详解API接口安全

  • JSON Web Token 入门教程

  • 移动APP网关安全设计

  • 开发安全的 API 所需要核对的清单

  • HTTP API接口安全设计

  • REST API 安全设计指南

  • API网关设计

  • 浅谈API安全设计


编程
安全

Post navigation

NEXT
有限状态机和状态模式
PREVIOUS
用户密码的存储策略

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

最近文章

  • 姥姥
  • 设计一个可扩展的用户模型
  • 使用 Apple 的 Keychain 保存 SSH 的 passphase
  • 解决 ABA 问题
  • 关于 macOS 上面部分 emoji 无法显示的问题
  • 这些年我技术栈的变化
  • 搬瓦工、狗云、hostodo、oracle对比测试
  • Google Drive 无法上传文件
  • 使用 socks5 代理 git ssh 协议
  • 到底要不要“润”
  • 可复用的代码
  • 关于疫情的一点点反思
  • 我的风控策略(投资篇)
  • 我的风控策略(生活篇)
  • Spring Boot是如何处理异常的
  • 编码与解码
  • 基于统计的图像目标检索
  • 有限状态机和状态模式
  • API安全设计
  • 用户密码的存储策略

近期评论

  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • Alex发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《到底要不要“润”》
  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《我的风控策略(生活篇)》
  • ǝɔɐǝԀʎzɐɹϽ发表在《如何写出简洁优雅的代码》
  • 张志亮发表在《如何写出简洁优雅的代码》

分类

  • AI (2)
  • Java应用安全之道 (1)
    • 加密与解密 (1)
  • Odoo (2)
  • Python (1)
  • 图像处理 (1)
  • 年鉴 (1)
  • 数据库 (10)
  • 编程 (14)
    • Spring (1)
  • 读书笔记 (2)
  • 运维 (5)
  • 随笔 (10)

归档

  • 2023年1月 (2)
  • 2022年8月 (1)
  • 2022年7月 (4)
  • 2022年6月 (2)
  • 2022年5月 (2)
  • 2022年4月 (3)
  • 2021年10月 (1)
  • 2021年7月 (1)
  • 2021年5月 (1)
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年3月 (2)
  • 2020年2月 (1)
  • 2019年1月 (1)
  • 2018年12月 (2)
  • 2018年11月 (2)
  • 2017年4月 (1)
  • 2016年11月 (1)
  • 2016年9月 (1)
  • 2016年7月 (1)
  • 2016年5月 (3)
  • 2016年4月 (2)
  • 2016年3月 (1)
  • 2016年2月 (2)
  • 2015年12月 (1)
  • 2015年11月 (2)
  • 2015年8月 (1)
  • 2015年4月 (1)
  • 2015年3月 (1)

标签

Database devops Java MySQL PostgreSQL Python shell Spring SpringBoot Spring Security 安全 年鉴 总结 编程 随笔
© 2015-2023   Geektop.net All Rights Reserved.