0

私はいつもパブリックIPアドレスを返すメソッドを知っています。あなたがwhatismyip.comのような外部サービスを使用しない限り、彼らは一般的に欠陥があるようです。リクエストに対するRailsのActionPack remote_ipの信頼性はどれくらいですか?

Railsのremote_ipメソッドは、外部パブリックIPを100%決定する際にどの程度信頼性がありますか?https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/remote_ip.rb

私が戦っていた問題がCloudFlareであり、別のヘッダがCF-Connecting-IPであることが判明しました。この特定の状況を克服するためには、私は(headers["CF-Connecting-IP"] || remote_ip)の行に沿って何かを介してそれを突き止めなければならないように見える。

だから私はサルのパッチremote_ipを必要とするか、またはこれを考慮して、どこでも自分のコードを乾燥させる必要はありません。

+0

あなたは何をするつもりですか?それが信頼できるものは何でしょうか? – iltempo

+0

Webアプリケーションを使用しているクライアントのリモートIPを検出するだけです。目標は、IPに基づいて確実にタイムゾーンを確認することです。 – ylluminate

+0

サービスを利用しているリモートのIPではなく、自分のIPを検出していませんか? – iltempo

答えて

0

remote_ipはHTTPリクエストヘッダに由来しているため、変更方法を知っている人なら誰でもremote_ipアドレスを変更できます。プロキシを使用してアドレスを変更することも可能です。ジオロケーションなどのために使うことができますが、ブラックリストやホワイトリストには適していないと思います。

+0

適切なヘッダーからipを抽出する必要がありました: 'CF-Connecting-IP'と' X-Forwarded-For' – ylluminate

2

私はremote_ipの現在の実装の作者だ、と私は(要求が複数のX-Forwarded-Forヘッダーが含まれている場合は特に)が正しくX-Forwarded-Forを処理するために、それを手直ししなければなりませんでした。メソッドがCF-Connecting-IPヘッダーもチェックするプルリクエストを送信したいと思うかもしれません。最後に、プロダクションで使用するアプリサーバーを変更する必要があります。その一部はignore repeated request headersです。

+0

私はポスターと同じ位置にあります。そのようなベンダー固有のヘッダーの処理が実際にレールソースに追加される可能性はありますか? – rogerkk

+0

remote_ipを扱う独自のミドルウェアを作成し、ActionPackに同梱されているミドルウェアを挿入するのは非常に簡単です。私は物事を試してみることをお勧めします。もしそれがあなたの役に立つなら、プルリクエストを提出してください。 – indirect

関連する問題