漏洞 2:身份驗證失效

存在漏洞的端點

@app.route("/verifyOTP", methods=["POST"])
def verifyOTP():
    received_code = request.data.code
    correct_code = get_generated_code()
    if received_code == correct_code:
        log_user_in()
        msg = "登錄成功"
        return msg, 200
    else:
        msg = "驗證碼錯誤"
        return msg, 403

問題分析:未限制用戶嘗試登錄的次數,攻擊者可以通過暴力破解自動化工具嘗試不同的密碼或驗證碼,直到成功為止。

如何修復此漏洞

@app.route("/verifyOTP", methods=["POST"])
def verifyOTP():
    # 驗證 - 檢查用戶嘗試 verifyOTP 的次數
    if has_available_attempts():
        received_code = request.data.code
        correct_code = get_generated_code()
        if received_code == correct_code:
            log_user_in()
            msg = "登錄成功"
            return msg, 200
        else:
            msg = "驗證碼錯誤。您只有5次嘗試"
            has_available_attempts(-1)
            return msg, 403
    else:
        msg = "錯誤請求過多。請一小時后重試"
        return msg, 429

修復建議


漏洞 3:數據過度暴露

API 通常依賴前端執行數據過濾,但這種方式容易被繞過。攻擊者可以通過瀏覽器開發者工具直接查看完整的 API 響應。

如何修復此漏洞

修復建議


漏洞 4:資源不足和速率限制缺失

存在漏洞的端點

@app.route("/image", methods=["POST"])
def upload_image():
    image = request.data.image
    if save(image) == True:
        msg = "圖片上傳成功"
        return msg, 200
    else:
        msg = "發生錯誤。請稍后再試"
        return msg, 500

問題分析:攻擊者可以通過自動化工具持續上傳大圖片,耗盡服務器資源。

如何修復此漏洞

@app.route("/image", methods=["POST"])
def upload_image():
    image = request.data.image
    if can_upload():
        if too_big(image.size):
            msg = "圖片大小過大。請選擇其他文件"
            return msg, 400
        if save(image) == True:
            msg = "圖片上傳成功"
            return msg, 200
        else:
            msg = "發生錯誤。請稍后再試"
            return msg, 500
    else:
        msg = "您已上傳過多圖片。請刪除一張以繼續。"
        return msg, 400

修復建議


漏洞 5:功能級授權失效

存在漏洞的端點

@app.route("/user/", methods=["DELETE"])
def delete_user(userid):
    if exists(userid):
        # 執行不安全操作
        delete(userid)
        msg = "用戶刪除成功"
        return msg, 200
    else:
        msg = "用戶不存在"
        return msg, 404

問題分析:未驗證用戶權限,任何人都可以通過調用此端點刪除用戶。

如何修復此漏洞

@app.route("/user/", methods=["DELETE"])
def delete_user(userid):
    if exists(userid):
        logged_user = get_user_information()
        # 驗證 - 只有管理員可以刪除用戶
        if is_admin(logged_user):
            delete(userid)
            msg = "用戶刪除成功"
            return msg, 200
        else:
            msg = "您無權執行此操作"
            return msg, 403
    else:
        msg = "用戶不存在"
        return msg, 404

修復建議


總結

通過本文,您已經了解了 OWASP API 安全十大風險中的部分關鍵問題及其修復方法。現在是時候評估您的 API 安全性并修補潛在漏洞了。安全開發不僅是技術能力的體現,更是對用戶和數據負責的表現。

敬請期待我們的第二部分內容,更多安全實踐即將揭曉!

原文鏈接: https://blog.vidocsecurity.com/blog/api-security-best-practices-for-developers/

上一篇:

API 身份驗證與授權:OAuth2、JWT 與最佳實踐

下一篇:

通過使用Reloadly API和IP白名單提升您的網絡安全性
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費