0

I need to do a basic flooding control, nothing very sophisticated. I want to get source IP and delay the answer if they are requesting too many times in a short period. I saw that there is a req.ip field but also a package: https://www.npmjs.com/package/request-ip

What's the difference?

4

1 に答える 1

1

このモジュールを使用することをお勧めしますrequest-ip。これは、リクエスト内の特定のヘッダーを探し、存在しない場合はいくつかのデフォルトにフォールバックするためです。

以下は、リクエストからユーザー IP を決定するために使用する順序です。

  1. X-Client-IP
  2. X-Forwarded-Forヘッダーは、「クライアント IP、プロキシ 1 IP、プロキシ 2 IP」の形式で複数の IP アドレスを返す場合があるため、最初の IP アドレスを取得します。
  3. X-Real-IP(nginx プロキシ/FastCGI)
  4. X-Cluster-Client-IP(ラックスペース LB、リバーベッド スティングレイ)
  5. #2 の順列: X-ForwardedForwarded-ForおよびForwarded
  6. req.connection.remoteAddress
  7. req.socket.remoteAddress
  8. req.connection.socket.remoteAddress
  9. req.info.remoteAddress

Web サーバーの構成やプロキシ設定、さらには接続の技術 ( HTTPẀebSocket...)に関係なく、実際のクライアント IP を取得できます。

Express req.ips(yes, ip s , not req.ip) プロパティを調べて、リクエストに関する詳細情報を取得することもできます。

req.ips ( http://expressjs.com/en/api.html )

信頼プロキシ設定が false と評価されない場合、このプロパティには、X-Forwarded-For 要求ヘッダーで指定された IP アドレスの配列が含まれます。それ以外の場合、空の配列が含まれます。このヘッダーは、クライアントまたはプロキシによって設定できます。

たとえば、X-Forwarded-For が client, proxy1, proxy2, req.ips の場合、["client", "proxy1", "proxy2"] となり、proxy2 が最も下流になります。

于 2016-04-22T17:54:45.667 に答える