Djangoで同一IPアドレスのアクセスがおおい場合、制限をしたい

2024年6月23日

同一IPアドレスからのアクセスが多い場合に制限をかけるためには、Django Middlewareを使用する方法があります。以下は、同一IPアドレスからのアクセス回数をカウントし、一定の制限を超えた場合にアクセスを拒否するMiddlewareの例です。

python
# myapp/middleware.py

from django.http import HttpResponseForbidden

class IPAccessLimitMiddleware:
    def __init__(self, get_response, limit=10):
        self.get_response = get_response
        self.limit = limit
        self.ip_count = {}

    def __call__(self, request):
        ip = request.META.get('REMOTE_ADDR')
        if ip not in self.ip_count:
            self.ip_count[ip] = 1
        else:
            self.ip_count[ip] += 1

        if self.ip_count[ip] > self.limit:
            return HttpResponseForbidden("Access limit exceeded for this IP address")

        response = self.get_response(request)
        return response

このMiddlewareをDjangoプロジェクトのsettings.pyで有効にするには、MIDDLEWAREのリストに追加します。

python
# settings.py

MIDDLEWARE = [
    # ...
    'myapp.middleware.IPAccessLimitMiddleware',
    # ...
]

この例では、同一IPアドレスからのアクセス回数をカウントし、一定の制限(デフォルトでは10回)を超えた場合にアクセスを拒否します。必要に応じて、limitパラメータを調整してください。

このMiddlewareはあくまで簡単な例であり、実際の使用ケースによってはより複雑な制御やセキュリティ対策が必要となるかもしれません。

未分類

Posted by ぼっち