API安全的最佳實踐

来源:https://www.cnblogs.com/wintersun/archive/2022/03/19/16026051.html
-Advertisement-
Play Games

應用程式編程介面(API)是一組允許軟體組件進行交互的協議。中間介面通常用於簡化開發,使軟體團隊能夠重覆使用代碼。API還通過將應用程式與它們所運行的基礎設施脫鉤來抽象系統之間的功能。儘管API在現代商業中的好處和用例不斷增加,但固有的安全挑戰帶來了各種安全風險。 本文深入探討了與API漏洞相關的各 ...


     应用程序编程接口(API)是一组允许软件组件进行交互的协议。中间接口通常用于简化开发,使软件团队能够重复使用代码。API还通过将应用程序与它们所运行的基础设施脱钩来抽象系统之间的功能。尽管API在现代商业中的好处和用例不断增加,但固有的安全挑战带来了各种安全风险。

     本文深入探讨了与API漏洞相关的各种风险,同时学习了常见的API安全最佳实践,以实施强大的安全机制。

什么是API安全?
      一个API代表了一组服务,允许一个程序与另一个外部或内部程序进行通信。当我们谈论API安全时,我们通常指的是保护应用程序的后端服务,包括其数据库、用户管理系统或其他与数据存储交互的组件。API安全包括采用多种工具和做法来保护技术栈的完整性。一个强大的安全的API包括一个组织使用的API和使用这些API的服务。这包括防止恶意行为者访问敏感信息或代表你采取你不希望他们执行的行动。不幸的是,虽然API是现代应用程序的一个重要组成部分,但它们是攻击者访问敏感信息的一个常见目标。在使用API时,了解第三方应用程序如何通过接口输送数据是至关重要的。此外,随着API日益成为一个攻击载体,API安全措施有助于安全团队评估安全风险,并有一个全面的计划来保护它们。

image

API漏洞的风险
       由于API是公开访问的,它们是窃取敏感信息的常见目标,包括应用逻辑、用户凭证、信用卡号码等。此外,API端点的漏洞也会被恶意行为者利用,以获得对系统或网络的未授权访问,进行其他形式的攻击,如跨站脚本和代码注入。在线网络应用安全项目
(OWASP)发布了基于风险的十大漏洞建议,以确保网络API的安全。这些包括:

破损的用户认证--基本认证在API中提出了一个独特的挑战,因为多因素认证和基于凭证的登录通常被认为对API调用不切实际。由于API依靠嵌入到调用中的会话令牌来认证客户,认证不充分的API,如有问题的访问令牌实现,使黑客可以假设合法用户的身份。另一方面,长期存在的令牌也允许攻击者持续存在,无限期地破坏系统。
破损的对象级授权 - 在API中,对象级授权是一种代码级的控制机制,用于验证对象访问。对于存在对象级授权漏洞的API,外部用户可以用另一个用户的资源的ID替换他们自己的资源的ID。这允许攻击者访问指定用户的资源,导致对敏感数据的未授权访问。
缺乏资源和速率限制 -当API不限制特定客户的请求数量和频率时,他们可以每秒进行无数次调用。API客户端也可以一次请求访问多个资源和记录,使应用服务器超载,以即时服务于多个请求。这可能导致拒绝服务攻击,因为客户端一次发出过多的请求,会阻碍服务器处理请求的能力。缺乏速率限制也鼓励黑客对认证端点进行暴力攻击。
大规模赋值--大规模赋值漏洞发生在自动将用户输入管道到对象或程序变量的API中。虽然这个功能简化了代码开发,但一些用户可以初始化和超写服务器端的变量,从而破坏了应用程序。攻击者大多通过猜测并在制作请求时提供额外的对象属性来利用这一点。他们还可以阅读应用程序的文档或识别薄弱的API端点,使他们能够修改服务器端对象。
安全错误配置 - 多种安全错误配置对API构成威胁。这些包括。
冗长的错误信息--有些API会发送包含堆栈痕迹和系统信息的描述性错误信息,使用户了解应用程序在引擎盖下的工作情况。
错误配置的HTTP头暴露了安全漏洞,黑客可以利用这些漏洞来渗出数据并进行更深层次的复杂攻击。
不必要的HTTP方法和服务 - 如果管理员没有关闭不必要的服务,恶意攻击者可以使用不同的HTTP方法修改发布的资源。
不安全的默认配置 - API与第三方依赖关系连接,其中许多默认情况下是不安全的,需要加强安全态势来应对扩大的攻击面。

API安全--需要考虑的最佳实践
以下的网络API安全最佳实践可以帮助减轻API攻击:

使用节流和速率限制
      节流涉及到设置一个临时状态,允许API评估每个请求,并经常被用作反垃圾邮件措施或防止滥用或拒绝服务攻击。在实现节流功能时,有两个主要的考虑因素:每个用户应该允许多少数据,以及何时应该强制执行限制?另一方面,速率限制通过避免DoS和Brute force攻击来帮助管理REST API的安全性。在一些API中,开发者设置软限制,允许客户端在短暂的时间内超过请求限制。设置超时是最直接的API安全最佳实践之一,因为它可以处理同步和异步的请求。请求队列库能够创建接受最大数量请求的API,然后将其余的请求放在一个等待队列中。每种编程语言都有一个队列库目录来实现请求队列。

扫描API漏洞
      为了维护API服务的持续安全,启用自动扫描,识别漏洞,并在软件生命周期的各个阶段缓解这些漏洞是至关重要的。自动扫描工具通过将应用程序的配置与已知的漏洞数据库进行比较,自主地检测安全漏洞。

对REST APIs使用HTTPS/TLS
      HTTPS和传输层安全(TLS)提供了一个安全协议,在网络浏览器和服务器之间传输加密的数据。除了其他形式的信息外,HTTPS还有助于保护传输中的认证凭证。作为最关键的做法之一,每个API都应该实施HTTPS,以实现完整性、保密性和真实性。此外,安全团队应考虑使用相互认证的客户端证书,为敏感数据和服务提供额外保护。在构建安全的REST API时,开发人员应避免将HTTP重定向到HTTPS,这可能会破坏API客户端的安全性。还应采取适当的措施,转移跨源资源共享(CORS)和JSONP请求,因为它们在跨域调用方面存在根本性的漏洞。

限制HTTP方法
      REST APIs使Web应用程序能够执行各种可能的HTTP动词操作。通过HTTP的数据是不加密的,使用一些HTTP方法可能会被拦截并被攻击载体所利用。作为一个推荐的最佳实践,应该禁止本质上不安全的HTTP方法(GET、PUT、DELETE、POST等)。如果不可能完全禁止它们的使用,安全团队也可以应用政策,用严格的允许列表来审查这些方法的使用,所有不符合列表的请求都应该被拒绝。我们还建议利用RESTful API认证的最佳实践,以确保请求的客户端可以在行动、记录和资源集合上使用指定的HTTP方法。

实施充分的输入验证
      原则上,不应盲目相信API客户端提供的数据,因为认证服务器最终可能会执行来自未授权用户或应用服务的恶意脚本。为了避免这种情况,安全团队应该在客户端和服务器端都实施输入验证机制,以防止不健康的输入。客户端验证包括交互式的错误指示和对用户可接受的输入的建议,而服务器端验证则额外检查收到的数据以避免不同类型的XSS和SQL注入攻击。

使用API网关
      API网关将客户接口与后端API集合解耦,为API服务的一致可用性和可扩展性提供集中的资源。除了管理各种API服务,API管理平台还处理标准功能,包括遥测、速率限制和用户认证,以维护内部服务之间的安全。网关作为一个反向代理门卫,接受所有的API调用,协调服务所需的资源,并在认证后返回相应的结果。


今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管管,团队建设 有参考作用 , 您可能感兴趣的文章:
HTTP API接口安全设计
领导人怎样带领好团队
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变

如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:

MegadotnetMicroMsg_thumb1_thumb1_thu[2]

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 十天前,我發佈了對.NET Core程式進行瘦身的開源軟體Zack.DotNetTrimmer,與.NET Core內置的剪裁器相比,Zack.DotNetTrimmer不僅對程式的剪裁效果更好,而且還支持WPF、WinForm程式。 很多朋友對於這個開源項目的原理很感興趣,因此我將通過這篇文章為大 ...
  • 1. 前言 通過之前的學習,我們已經瞭解了各參數以及配置的意義,接下來的文章我們分別從bombardier以及wrk入手,進一步瞭解彼此之間的聯繫 2. 認識 bombardier bombardier 是一個 HTTP(S) 基準測試工具。它是用 Go 編程語言編寫的,並使用優秀的fasthttp ...
  • 一 發佈者和訂閱者 很多時候都有這種需求,當一個特定的程式事件發生時,程式的其他部分可以得到該事件已經發生的通知。 發佈者/訂閱者模式可以滿足這種需求。 發佈者:發佈某個事件的類或結構,其他類可以在該事件發生時得到通知。 訂閱者:註冊併在事件發生時得到通知的類或結構。 事件處理程式:由訂閱者註冊到事 ...
  • Net6 Configuration & Options 源碼分析 Part2 Options 第二部分主要記錄Options 模型 OptionsConfigurationServiceCollectionExtensions類提供了對Options 模型與配置系統的Configure方法的擴展 ...
  • 1. 前言 WPF 的 TextBlock 提供了大部分常用的文字修飾方法,在日常使用中基本夠用。如果需要更豐富的表現方式,WPF 也提供了其它用起來複雜一些的工具去實現這些需求。例如這篇文章介紹的文字描邊,就有幾種方法可以在 WPF 中呈現。這篇文章將簡單介紹這實現文字描邊的方法。 2. 將文字轉 ...
  • 今天我們一起來探索一下ASP.NET Core框架中的Authorization。我們知道請求進入管道處理流程先會使用Authentication進行用戶認證,然後使用Authorization進行用戶授權。如果沒有看過認證過程的大家可以先轉到Authentication這一篇。 AddAuthor ...
  • Viewer.js庫是一個實用的js庫,用於圖片瀏覽,放大縮小翻轉幻燈片播放等實用操作 本文相關參考鏈接 JavaScript 模塊中的 JavaScript 隔離 Viewer.js工程 Blazor JS 隔離優勢 導入的 JS 不再污染全局命名空間。 庫和組件的使用者不需要導入相關的 JS。即 ...
  • 一 什麼是委托 可以認為委托是持有一個或多個方法的對象。可以執行委托,執行時委托會執行它所持有的方法。 從C++的角度理解,委托可以看成一個類型安全、面向對象的C++函數指針。 delegate void MyDel(int value); //聲明委托類型 class Program { void ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...