「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Iris のリクエストボディ制限ミドルウェア

Iris のリクエストボディ制限ミドルウェア

2024 年 11 月 8 日に公開
ブラウズ:855

Request Body Limit Middleware for Iris

概要

Iris Body Limit ミドルウェアは、Iris Web アプリケーションで受信するリクエストボディのサイズを制御するための強力なツールです。リクエスト本文のサイズに制限を設定することで、サーバーに負荷をかけたり、サービス拒否 (DoS) 攻撃につながる可能性のある過度に大きなペイロードをクライアントが送信することを防ぐことができます。このミドルウェアは、ファイルのアップロード、JSON ペイロード、またはサイズが大きく異なる可能性のあるその他の種類のデータを処理するアプリケーションに特に役立ちます。

Body Limit ミドルウェアを使用する理由

安全

ボディ制限ミドルウェアを使用する主な理由の 1 つは、アプリケーションのセキュリティを強化することです。受信リクエストボディのサイズを制限することで、攻撃者がサーバー リソースを使い果たすために大きなペイロードを送信する DoS 攻撃のリスクを軽減できます。

パフォーマンス

リクエストボディのサイズを制限すると、アプリケーションのパフォーマンスも向上します。ペイロードが大きいと、大量のメモリと処理能力が消費され、サーバーの速度が低下し、ユーザー エクスペリエンスに影響を与える可能性があります。適切な制限を設定することで、サーバーの応答性と効率性を維持できます。

リソース管理

ファイルのアップロードや大規模な JSON ペイロードを処理するアプリケーションでは、リソースを効果的に管理することが不可欠です。本文制限を設定すると、クライアントがサーバーのリソースに負担をかける可能性のある過度に大きなファイルをアップロードしたり、巨大な JSON オブジェクトを送信したりすることを防ぐことができます。

インストール

bodylimit ミドルウェアを使用するには、それを Iris アプリケーションにインポートする必要があります:

import "github.com/kataras/iris/v12/middleware/bodylimit"

使用法

基本的なセットアップ

身体制限ミドルウェアを利用するには、Irisアプリケーションを作成し、ミドルウェアを登録する必要があります。以下は、2 MB の制限でミドルウェアを設定する方法の例です:

package main

import (
    "github.com/kataras/iris/v12"
    "github.com/kataras/iris/v12/middleware/bodylimit"
)

func main() {
    app := iris.New()
    app.Use(bodylimit.New(2 * iris.MB)) // set the limit to 2 MB.

    handler := func(ctx iris.Context) {
        body, err := ctx.Body()
        if err != nil {
            ctx.StopWithPlainError(iris.StatusInternalServerError, err)
            return
        }

        ctx.Write(body) // write the request body back to the client.
    }

    app.Post("/", handler)
    app.Listen(":8080")
}

説明

  • Limit: bodylimit.New 関数は、リクエスト本文の最大サイズ (バイト単位) を 1 つのパラメータとして受け取ります。上の例では、制限は 10 バイトに設定されています。
  • ハンドラー: ハンドラーはリクエストの本文を読み取り、それをレスポンスに書き込みます。リクエスト本文が制限を超えると、ミドルウェアはリクエストを停止し、413 Request Entity Too Large ステータスを返します。
  • 本文制限ミドルウェアは、sync.Pool を使用して Reader インスタンスを管理します。Reader インスタンスは、リクエスト本文を読み取り、サイズ制限を適用するために使用されます。このアプローチにより、効率的なメモリ使用が保証され、リクエストごとに新しい Reader インスタンスを作成するオーバーヘッドが削減されます。

BodyLimit ミドルウェアを使用したハンドラーのテスト

BodyLimit ミドルウェアを使用するハンドラーをテストするには、Iris が提供する httptest パッケージを使用できます。以下はハンドラーをテストする方法の例です:

package main_test

import (
    "testing"

    "github.com/kataras/iris/v12"
    "github.com/kataras/iris/v12/httptest"
    "github.com/kataras/iris/v12/middleware/bodylimit"
)

func TestBodyLimit(t *testing.T) {
    limit := int64(10) // set the limit to 10 bytes for the shake of the test.

    handler := func(ctx iris.Context) {
        body, err := ctx.Body()
        if err != nil {
            ctx.StopWithPlainError(iris.StatusInternalServerError, err)
            return
        }
        ctx.Write(body)
    }

    app := iris.New()
    app.Use(bodylimit.New(limit))
    app.Post("/", handler)

    e := httptest.New(t, app)

    // Test with a body that is smaller than the limit.
    e.POST("/").WithText("123456789").Expect().Status(iris.StatusOK).Body().IsEqual("123456789")

    // Test with a body that is equal to the limit.
    e.POST("/").WithText("1234567890").Expect().Status(iris.StatusOK).Body().IsEqual("1234567890")

    // Test with a body that is bigger than the limit.
    e.POST("/").WithText("12345678910").Expect().Status(iris.StatusRequestEntityTooLarge)
}

結論

Iris Body Limit ミドルウェアは、Iris Web アプリケーションで受信リクエストボディのサイズを制御するためのシンプルかつ効果的な方法を提供します。リクエスト本文のサイズに制限を設定することにより、アプリケーションのセキュリティ、パフォーマンス、リソース管理を強化できます。簡単な統合と高度な機能を備えたこのミドルウェアは、Iris 開発者にとって貴重なツールです。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/kataras/request-body-limit-middleware-for-iris-4999?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3