首頁 >web前端 >js教程 >如何在使用 AWS Lambda Function Url 時驗證要求

如何在使用 AWS Lambda Function Url 時驗證要求

Barbara Streisand
Barbara Streisand原創
2024-12-08 17:51:12444瀏覽

How to validate requests when using AWS Lambda Function Url

介紹

Lambda 函數 URL 是 AWS Lambda 函數的內建 HTTPS 端點。它允許您直接透過 HTTP 呼叫 Lambda 函數,而無需 API Gateway 等中間服務。當您的函數需要公開存取或整合到 Web 應用程式中時,這可以簡化部署。使用 Lambda 函數 URL 驗證請求會帶來獨特的挑戰和細微差別,這與您可以使用 Model 和 RequestValidator See 的 API Gateway 不同。

在本文中,我將指導您如何簡單地驗證事件對象,並在收到的事件負載不匹配時返回適當的錯誤。

為什麼需要 Lambda 函數 URL

Lambda 函數 URL 是具有唯一 URL 的專用端點,它提供了透過 HTTP 呼叫 Lambda 函數的簡單方法。當您建立 Lambda 函數 URL 時,AWS 會自動產生該函數的 URL,您可以設定基於 IAM 的身份驗證或將其保留為公開(以供開放存取)。

Lambda 函數 URL 的重要性是:

  1. 簡單性:當您只需要一個簡單的 HTTP 端點時,就不需要設定和管理 API 閘道。

  2. 成本效益:與使用 API Gateway 進行基本用例相比,可降低成本,因為 Lambda 函數 URL 除標準 Lambda 定價外沒有額外費用。

  3. 快速部署:非常適合快速原型設計或無需設定 API 閘道的用例。

  4. 原生 HTTPS 支援:無需額外設定即可提供安全通訊。

  5. 身份驗證控制:支援基於 IAM 的身份驗證以實現安全訪問,或者可以設定為公開以用於開放端點。

什麼時候需要 Lambda 函數 URL

  1. 微服務和 Webhooks:

    • 輕鬆建立回應 HTTP 請求的微服務。
    • 使用 Lambda 函數 URL 處理來自第三方服務(例如支付系統、通知)的 Webhook 回呼。
  2. 原型設計與展示

    • 無需設定 API 閘道即可快速公開後端函數以進行示範。
  3. 自動化與內部工具:

    • 建立員工可以透過簡單 URL 直接存取的內部工具。
  4. 靜態網站後端:

    • 將 Amazon S3 或 CloudFront 上託管的靜態網站與 Lambda 函數 URL 配對以實現動態功能(例如表單提交)。
  5. 物聯網整合

    • 允許 IoT 裝置直接透過 HTTP 端點觸發無伺服器功能。

如何驗證 Lambda 函數 Url 中的請求

步驟:

  1. 定義您的請求模型
  2. 使用可重複使用的請求模型來驗證您的事件主體資料(有效負載)
  3. 將模型插入您的處理程序方法

定義您的請求模型

定義事件主體的模型。假設您需要姓名、電子郵件和可選的手機號碼。我們將建立一個與預期事件主體相符的模型。

先決條件:安裝Joi --> npm 安裝 Joi

const Joi = require('joi');

const eventModel = Joi.object({
    name: Joi.string().required(),
    email: email: Joi.string().email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } }),
    mobileNumber: Joi.string().optional()
})

使用請求模型來驗證您的事件

建立模型後,接下來我們需要使用模型驗證事件主體資料;此步驟也確保正確處理錯誤。

const validateEventData = async (data) => {
    try{
        const value = await eventModel.validateAsync(data);
        return value;
    }catch(error){
        throw new Error( error.message || error);
    }
}

將模型插入您的處理程序方法中

module.exports.handler = async (event, context) => {
  try{
    const body = validateEventData(event.body);
    return { statusCode: "200", body };
    }
  }catch (err) {
    return {
        statusCode: 400,
        body: { message: 'Invalid request body', error: err.message || err },
    };
  }
}

樣本錯誤

假設我們發送了一個不匹配的事件對象,例如:

{
    "email": "value3@gmail.com"
    "mobileNumber": "234567890"
}

請注意,我們取出了必填欄位名稱。

  "statusCode": 400,
  "body": { "message": "Invalid request body", "error": "\"name\" is required"
  }

這是結論部分的重構和擴展版本,以提供更多深度並強化關鍵要點:


結論

正確驗證傳入請求是保護您的 AWS Lambda 函數免受 SQL 注入、腳本注入和其他形式的惡意輸入等潛在漏洞影響的關鍵步驟。透過實施強大的驗證實踐,您可以確保您的應用程式保持安全、可靠和彈性。

在本文中,我們示範如何使用 Joi 函式庫在 AWS Lambda 函數中執行請求驗證。使用 Joi,您可以定義清晰的驗證模式、強制資料完整性,並在輸入不滿足您的要求時向使用者提供資訊豐富的錯誤訊息。這種方法不僅可以增強您的應用程式抵禦安全威脅的能力,還可以透過保持驗證邏輯的結構化和可重複使用性來增強可維護性。

按照概述的步驟,您可以將輸入驗證無縫整合到 Lambda 函數中並優雅地處理驗證錯誤。因此,您的無伺服器應用程式可以更安全地運行,讓您確信只處理格式正確的有效資料。

請記住,驗證只是全面安全策略的一層。將其與正確的錯誤日誌記錄、輸入清理和身份驗證機制(如 AWS Cognito)等實踐相結合將進一步增強應用程式的安全性。

像這樣的安全編碼實踐對於建立健全的無伺服器架構至關重要。立即開始實施輸入驗證以保護您的 AWS Lambda 終端節點並為您的使用者提供更安全的體驗。

———————————————

更多文章,請追蹤我的社群帳號:

  • 領英
  • 推特
  • 開發

以上是如何在使用 AWS Lambda Function Url 時驗證要求的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn