Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ログの出力で X-Forwarded-For が考慮されていない #4601

Closed
mattintosh4 opened this issue Jun 28, 2020 · 4 comments
Closed

ログの出力で X-Forwarded-For が考慮されていない #4601

mattintosh4 opened this issue Jun 28, 2020 · 4 comments
Labels
affected:外部仕様 外部仕様の変更や追加 improvement 機能改善
Milestone

Comments

@mattintosh4
Copy link

概要(Overview)

下記の部分ですが REMOTE_ADDR を返しているためロードバランサー等を使用している環境ではログに出力される IP がすべてロードバランサーの IP になってしまいます。

public function getClientIp()
{
return isset($this->serverData['REMOTE_ADDR']) ? $this->serverData['REMOTE_ADDR'] : null;
}

期待する内容(Expect) or 要望 (Requirement)

X-Forwarded-For が存在する場合は X-Forwarded-For の値を返す方が良いのですが、以下の選択肢が出てくると思います。

, が増えても問題ないのであれば X-Forwarded-For を返す(, でログをパースしている場合に影響が出る可能性あり)

--- /dev/fd/63  2020-06-28 23:29:21.090798138 +0900
+++ src/Eccube/Log/Monolog/Processor/WebProcessor.php   2020-06-28 23:28:21.496937570 +0900
@@ -50,6 +50,9 @@

     public function getClientIp()
     {
+        if (!empty($this->serverData['HTTP_X_FORWARDED_FOR'])) {
+            return $this->serverData['HTTP_X_FORWARDED_FOR'];
+        }
         return isset($this->serverData['REMOTE_ADDR']) ? $this->serverData['REMOTE_ADDR'] : null;
     }

, が増えると問題になる場合は X-Forwarded-For の一番左を返す(一番左にクライアント IP が入っていることを信頼する場合)

--- /dev/fd/63  2020-06-28 23:29:21.090798138 +0900
+++ src/Eccube/Log/Monolog/Processor/WebProcessor.php   2020-06-28 23:28:21.496937570 +0900
@@ -50,6 +50,9 @@

     public function getClientIp()
     {
+        if (!empty($this->serverData['HTTP_X_FORWARDED_FOR'])) {
+           return array_map('trim', explode(',', $this->serverData['HTTP_X_FORWARDED_FOR']))[0];
+        }
         return isset($this->serverData['REMOTE_ADDR']) ? $this->serverData['REMOTE_ADDR'] : null;
     }

ロードバランサー下で使うことを前提としておらず、各々のカスタマイズの範疇ということであればご放念ください。

再現手順(Procedure)

ロードバランサーを使用している環境。

環境 (environment)

  • EC-CUBE: 3.x.x
  • PHP: 7.x.x
  • DB:
    • PostgreSQL x.x.x
    • MySQL x.x.x

関連情報 (Ref)

@okazy okazy added improvement 機能改善 affected:外部仕様 外部仕様の変更や追加 labels Jun 29, 2020
@okazy okazy modified the milestones: 4.0.x, 3.0.x Jun 29, 2020
@okazy
Copy link
Contributor

okazy commented Jun 29, 2020

私もロードバランサをかました時に同様の課題にぶち当たりました。。。

@mattintosh4
3系のリポジトリは4系のリポジトリから分かれ、以下に移行されています。
https://github.com/EC-CUBE/ec-cube3/issues

お手数ですが3系の以下のリポジトリでIssueを立て直していただけますでしょうか?

@mattintosh4
Copy link
Author

@okazy 自前の環境の場合はインフラ側で調整出来ないこともないのですが、他の部分で X-Forwarded-For を考慮している部分もあるのでこちらも考慮してみてはいかがかなと思いました。
3系は別になっていたのですね。失礼しました。後ほど立て直しさせていただきます。

@mattintosh4
Copy link
Author

3系の方に転機させていただきましたのでクローズします。
EC-CUBE/ec-cube3#88

@okazy
Copy link
Contributor

okazy commented Jul 10, 2020

ありがとうございます!

@okazy okazy modified the milestones: 3.0.x, Not release Jul 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
affected:外部仕様 外部仕様の変更や追加 improvement 機能改善
Projects
None yet
Development

No branches or pull requests

2 participants