Symfony 3.4 RequestStack -> MasterRequest -> ClientIp

Я полностью понимаю, что тестирую его на своем локальном хосте, но мне интересно, должен ли он возвращать реальный IP-адрес моего ноутбука или как на самом деле loopback ':: 1' в каждом из следующих случаев ... Будет ли он работать по-другому в производстве или я упустить момент?

С контроллера

 <?php

namespace SD\UserBundle\Controller;

use FOS\UserBundle\Controller\SecurityController as OriginalController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;

class SecurityController extends OriginalController
{
  public function loginAction(Request $request)
  {
    $clientIp = $this->get('request_stack')
       ->getMasterRequest()
       ->getClientIp()
    ;

    if ($this->get('sd_user.ip_foresight')->isBlackListed($clientIp))
    {
      return new RedirectResponse(
        $this->generateUrl('sd_user_forbidden')
      );
    }

    return parent::loginAction($request);
  }

}

От слушателя

<?php

namespace SD\UserBundle\EventListener;

use Symfony\Component\HttpFoundation\RequestStack;

class IpListener implements EventSubscriberInterface
{
  protected $requestStack;

  public function __construct(RequestStack $requestStack)
  {
    $this->requestStack = $requestStack;
  }

  public function clientIp()
  {
    return $this->requestStack->getMasterRequest()->getClientIp();
  }

  // ...
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
433
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы делаете это правильно. Посмотрим, откуда берется IP-адрес:

  1. Браузер клиента делает запрос к http://example.com.
  2. Веб-сервер улавливает запрос и его информацию, такую ​​как IP-адрес, заголовки и т. д.
  3. Веб-сервер пересылает этот запрос бэкенду (symfony) и передает информацию о запросе.
  4. Symfony начинает процесс выполнения с заполнения главного объекта Request информацией, предоставленной веб-сервером.

Таким образом, в конечном итоге вы получаете IP-адрес клиента real, а не тот, который был переопределен каким-то действием, которое вызывало подзапрос.

Но есть одно исключение, когда вы используете балансировщик нагрузки, в этом случае просто прочтите официальную документацию:

Как настроить Symfony для работы за балансировщиком нагрузки или обратным прокси

Можно также отметить, что для клиента тривиально подделать IP-адрес, поэтому блокировка не помешает определенному пользователю.

Cerad 19.05.2018 02:13

@vadimashikhman: На данный момент я не решил использовать прокси, но детали вашего ответа мне немного больше помогают. Так что я думаю, что на моем ноутбуке нет другого способа получить результат, отличный от «:: 1». Спасибо.

user9648842 19.05.2018 14:11

@cerad: Моя идея состоит в том, чтобы запретить простому пользователю, уже зарегистрированному, получить доступ к подключенной части моего сайта, собирая его IP-адрес при каждом подключении, если происходит плохое поведение, например, очень грубые комментарии, я оставляю за собой право заблокировать этот человек. Очевидно, это ограничено.

user9648842 19.05.2018 14:14

@SylvainDemaimay, также учитывайте динамические IP-адреса, это обычная практика, когда вы выделяете один IP-адрес для всего офиса компании, и когда вы блокируете только 1 человека, никто из этого же офиса не может получить доступ к вашему сайту

Vadim Ashikhman 19.05.2018 16:51

@SylvainDemaimay, если этот ответ решит вашу проблему, не забудьте отметить его как принятый, спасибо.

Vadim Ashikhman 19.05.2018 16:53

Другие вопросы по теме