Symfony 4 - Безопасна ли система профилей моего пользователя?

Бонжур,

Я начинаю с Symfony и пытаюсь заставить пользователей видеть профили других пользователей.

Шаблон моего профиля одинаков для всех, отображение информации основано на имени пользователя, переданном в параметрах URL. Я просто сравниваю на ветке, если имя пользователя в сеансе и в параметрах совпадают.

Например, в моем представлении профиля:

{% if app.user.username == userAccount.username %}

My profile

{% else %}

{{ userAccount.username }} profile

{% endif %}

Мой метод индекса для учетной записи маршрута:

    public function index($username, UserRepository $repo, Request $request{

    $user = $repo->findUserByUsername($username);

    if (!$user){throw $this->createNotFoundException();}

Я получаю пользователя в BDD по его имени пользователя. Проблема в том, что я действительно получаю все обратно, и я хотел бы знать, безопасно ли это? Может ли кто-нибудь каким-либо образом перехватить запрос и просмотреть всю полученную информацию?

Затем я создаю страницу смены пароля, маршрут всегда принимает имя пользователя в качестве параметра. Однако на этот раз в своем контроллере я указал, что необходимо перенаправить пользователя в случае, если его имя пользователя в сеансе не совпадает с тем, которое передается в параметрах.

public function changePassword($username, Request $request, UserPasswordEncoderInterface $passwordEncoder, ObjectManager $manager, \Swift_Mailer $mailer){
$user = $this->getUser();

 if ($username == null){
 $username = $user->getUsername();}

 if ($user->getUsername() !== $username){
 throw $this->createNotFoundException();}}

Это верный способ убедиться, что пользователь правильный?

Я не знаю, хорош ли мой способ ведения дел, поэтому, если бы кто-нибудь мог просветить меня, чтобы я мог продолжить или адаптировать свою работу.

Спасибо !

Стоит ли изучать 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
49
1

Ответы 1

Twig выполняется на стороне сервера, поэтому, если ваш код написан правильно, я не вижу никаких проблем с безопасностью. Запрос не может быть перехвачен таким образом.

Но если вы переживаете (разработчики тоже могут ошибаться), я бы посоветовал разделить шаблоны и использовать одни и те же элементы.

Что касается части changePassword, вам действительно нужно передавать имя пользователя в запросе? У вас уже есть аутентифицированный пользователь в сеансе.

Спасибо за Ваш ответ. URL-адрес страницы смены пароля выглядит примерно так: /account/{username}/change_password. И я не хочу, чтобы пользователь мог редактировать URL-адрес другим словом (например, /account/hello/change_password). Я думаю, это просто визуально, но я хочу для перенаправления пользователя, если имя пользователя в URL неверно ^^ . Вот почему мне нужно передать имя пользователя в запросе, но я не уверен, что это лучший способ ^^

user11084147 20.02.2019 19:50

Если вы можете изменить пароль только для своей учетной записи (что нормально), имя пользователя в URL-адресе является лишней информацией для текущего пользователя. Ваш маршрут может быть просто /account/change_password. Твой выбор.

Zak 20.02.2019 20:39

Да, вы правы, но я думал, что URL-адрес был красивее с именем пользователя до всех действий ^^

user11084147 21.02.2019 13:00

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