4

辞書攻撃を防ぐために、Django 管理者ログインのレートを制限するさまざまな方法を検討しています。

1 つの解決策がここで説明されています: http://simonwillison.net/2009/Jan/7/ratelimitcache/

ただし、Nginx を使用して、Web サーバー側でレート制限を行うことをお勧めします。

Nginx のlimit_reqモジュールはまさにそれを行います - 1 分あたりの最大リクエスト数を指定し、ユーザーがそれを超えた場合は 503 を送信できます: http://wiki.nginx.org/NginxHttpLimitReqModule

完全!Django 管理者のログイン ページが一貫した場所にないことに気付くまで、クラックしたと思っていました。たとえば、/admin/blah/ は、標準のログイン ページにバウンスするのではなく、その URL でログイン ページを提供します。

そのため、URL で一致することはできません。管理ページが表示されていることを知る別の方法を考えられる人はいますか (応答 HTML を正規表現しますか?)

4

2 に答える 2

3

まず第一に: django 管理者を少し保護するために、私は常に /admin/ とは異なる管理者用の URL を使用します。別のドメインまたはサブドメインに 2 番目のアプリケーションとして管理者をデプロイすることをお勧めします。

IPTABLES/NETFILTER を使用して、1 分あたりのリクエストを webapp 全体に制限できます。これを行う方法のチュートリアルはdebian administratorにあります。これは ssh ポートを保護する方法の例ですが、http にも同じ手法を使用できます。

NginxHttpLimitZone モジュールを使用して、割り当てられたセッションの同時接続数を制限したり、特別なケースとして、1 つの IP アドレスから制限したりできます。nginx.conf を編集します。

www.cyberciti.bizから

### Directive describes the zone, in which the session states are stored i.e. store in slimits. ###
### 1m can handle 32000 sessions with 32 bytes/session, set to 5m x 32000 session ###
       limit_zone slimits $binary_remote_addr 5m;

### Control maximum number of simultaneous connections for one session i.e. ###
### restricts the amount of connections from a single ip address ###
        limit_conn slimits 5;

上記は、リモート クライアントを、リモート IP アドレスごとに同時に「開いている」接続を 5 つ以下に制限します。

于 2010-03-31T13:22:55.310 に答える
1

その通りです。別のインスタンス (つまり、別のドメイン/サブドメイン/ポート) で admin を実行する必要があります。

django-sentinelにも興味があるかもしれません。これは、memcached と自動ブラックリストを使用して疑わしい IP アドレス/ネットワークを動的にグレーリスト化し、違反者を繰り返します。

于 2011-05-24T04:20:32.873 に答える