4

Django でローカルホストのみの API を作成したいのですが、サーバー自体 (ローカルホスト) からのみビューへのアクセスを制限する方法を見つけようとしていますか? 私は使用してみました:

  • 'HTTP_HOST',
  • 'HTTP_X_FORWARDED_FOR',
  • 'REMOTE_ADDR',
  • 「サーバー_アドレス」

しかし運がない。

他に方法はありますか?

4

2 に答える 2

7

localhost のみにバインドするように Web サーバー (Apache、Nginx など) を構成できます。

これは、すべてのビューへのアクセスを制限したい場合にはうまく機能しますが、リモート ユーザーから一部のビューへのアクセスを許可したい場合は、2 つ目の Django プロジェクトを構成する必要があります。

于 2012-07-27T11:44:52.930 に答える
5

問題は、単に変数をチェックするよりも少し複雑です。クライアントの IP アドレスを特定するには、

request.META['REMOTE_ADDR'] -- The IP address of the client.

と比較しrequest.get_host()ます。ただし、サーバーが 0.0.0.0:80 で起動される可能性があることを考慮すると、次のようにする必要があります。

import socket
socket.gethostbyaddr(request.META['REMOTE_ADDR'])

これを比較してみましょう

socket.gethostbyaddr("127.0.0.1")

ただし、これらのヘッダーと値を使用して多くのエッジ ケースを処理する必要があります。

はるかに簡単なアプローチは、アプリの前にリバース プロキシを配置することですX_SOURCE=internet。次に、インターネットからのトラフィックがプロキシを通過するように設定し、ローカル トラフィック (ローカル ネットワーク内) が Web サーバーに直接送信されるように設定できます。したがって、ローカル ネットワークからのみ特定のビューにアクセスしたい場合は、次のヘッダーを確認してください。

if 'X_SOURCE' in request.META:
    # request is coming from internet, and not local network....
else:
    # presumably we have a local request...

しかし、繰り返しになりますが、これは「ファイアウォールアプローチ」であり、さらに設定が必要であり、外部からアプリにアクセスできないようにするために、リバースプロキシを経由しません..

于 2012-07-27T13:12:13.707 に答える