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

简介: 以下是当你在设计, 测试以及发布你的 API 的时候所需要核对的重要安全措施.

身份认证

  • 不要使用 Basic Auth 使用标准的认证协议 (比如 JWT, OAuth).
  • 不要再造 Authentication, token generating, password storing 这些轮子, 使用标准的.

JWT                                     (JSON Web Token)

  • 使用随机复杂的秘钥 (JWT Secret) 以增加暴力破解的难度.
  • 不要在请求体中直接提取数据, 要对数据进行加密 (HS256 or RS256).
  • 是 token 的过期时间尽量的短 (TTL, RTTL) .
  • 不要在 JWT 的请求体重存放敏感数据, 它是可破解的 easily.

OAuth                                     授权或认证协议

  • 始终在后台验证 redirect_uri 只允许白名单的 url.
  • 每次交换令牌的时候不要加 token (不允许 response_type=token).
  • 使用 state 参数并填充随机的哈希数来防止跨站请求伪造(CSRF).
  • 对不同的应用分别定义默认的作用于和各自有效的作用域参数.

访问

  • 限制流量来防止 DDos 攻击和暴力攻击.
  • 在服务端使用 HTTPS 协议来防止 MITM 攻击.
  • 使用 HSTS 协议防止 SSLStrip 攻击.

输入

  • 使用与操作相符的 HTTP 操作函数 , GET (读取), POST (创建), PUT (替换/更新) and DELETE (删除记录).
  • 在请求头中的 content-type 字段使用内容验证来只允许支持的格式 (比如 application/xml , application/json ...) 并在不满足条件的时候返回 406 Not Acceptable                                        .
  • 验证 content-type 的发布数据和你收到的一样 (如 application/x-www-form-urlencoded , multipart/form-data ,application/json 等等...                                         ).
  • 验证用户输入来避免一些普通的易受攻击缺陷 (比如 XSS, SQL-注入 , 远程代码执行 等等...).
  • 不要在 URL 中使用任何敏感的数据在 ( credentials , Passwords, security tokens, or API keys), 而是使用标准的认证请求头.

处理

  • 检查是否所有的终端都在身份认证之后, 以防止破坏认证体系.
  • 避免使用特有的资源标识符. 使用 /me/orders 替代 /user/654321/orders
  • 使用 UUID 代替自增长的 id.
  • 如果你正在解析 XML 文件, 确认确保外部实体是关闭的以避免XXE攻击.
  • 在文件上传中使用 CDN.
  • 如果你在处理大量的数据, 使用 Workers 和 Queues 来快速响应, 从而避免 HTTP 阻塞.
  • 不要忘了吧 DEBUG 模式关掉.

输出

  • 发送 X-Content-Type-Options: nosniff 头.
  • 发送 X-Frame-Options: deny 头.
  • 发送 Content-Security-Policy: default-src 'none' 头.
  • 在响应中强制使用 content-type , 如果你的类型是 application/json 那么你的 content-type 就是 application/json.
  • 不要返回敏感的数据, 如 credentials , Passwords, security tokens.
  • 在操作结束时返回恰当的状态码. (比如 200 OK , 400 Bad Request , 401 Unauthorized, 405 Method Not Allowed 等等...).

Contribution

Feel free to contribute , fork -> edit -> submit pull request. For any questions drop us an email at team@shieldfy.io.


目录
相关文章
|
4天前
|
API 开发工具 数据库
开发一份API接口,需要注意这些,看你做到了几项
本文介绍了设计API接口时需注意的关键点,包括数字签名、敏感数据加密与脱敏、限流、参数校验、统一返回与异常处理、请求日志记录、幂等设计、数据量限制、异步处理、参数定义、完整文档及开发者对接SDK等内容,旨在帮助开发者设计出安全、稳定、易维护的API接口。
40 6
开发一份API接口,需要注意这些,看你做到了几项
|
12天前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
38 3
如何使用Python开发API接口?
|
8天前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
7天前
|
JSON 前端开发 API
后端开发中的API设计与文档编写指南####
本文探讨了后端开发中API设计的重要性,并详细阐述了如何编写高效、可维护的API接口。通过实际案例分析,文章强调了清晰的API设计对于前后端分离项目的关键作用,以及良好的文档习惯如何促进团队协作和提升开发效率。 ####
|
5天前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
20 1
|
8天前
|
监控 搜索推荐 安全
探究亚马逊详情API接口:开发与应用
在数字化时代,亚马逊作为全球领先的电商平台,为商家和消费者提供了丰富的商品信息和便捷的购物体验。本文深入探讨了亚马逊详情API接口的获取与运用,帮助开发者和商家实时监控商品数据、分析市场趋势、优化价格策略、分析竞争对手、构建推荐系统及自动化营销工具,从而在竞争中占据优势。文章还提供了Python调用示例和注意事项,确保API使用的安全与高效。
30 3
|
12天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
35 4
|
11天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
随着互联网技术的发展,前后端分离成为Web开发的主流模式。本文介绍RESTful API的基本概念、设计原则及在PHP中的实现方法。RESTful API是一种轻量级、无状态的接口设计风格,通过HTTP方法(GET、POST、PUT、DELETE)操作资源,使用JSON或XML格式传输数据。在PHP中,通过定义路由、创建控制器、处理HTTP请求和响应等步骤实现RESTful API,并强调了安全性的重要性。
18 2
|
18天前
|
前端开发 关系型数据库 API
深入浅出后端开发——从零到一构建RESTful API
本文旨在为初学者提供一个关于后端开发的全面指南,特别是如何从零开始构建一个RESTful API。我们将探讨后端开发的基本概念、所需技术栈、以及通过实际案例展示如何设计和实现一个简单的RESTful API。无论你是完全的新手还是有一定编程基础的开发者,这篇文章都将为你提供实用的知识和技巧,帮助你在后端开发的道路上迈出坚实的一步。
|
7天前
|
缓存 前端开发 API
探索后端开发中的API设计原则
【10月更文挑战第37天】本文旨在引导读者理解API设计的核心理念,通过简明的语言和直观的示例,揭示如何构建高效、稳定且易于维护的后端接口。我们将深入浅出地探讨RESTful API的设计规范,并通过一个简易的代码样例,展示如何在实战中应用这些原则。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的参考和启示。