Symfony 4 - Безопасна ли профильная система моего пользователя?
Bonjour,
Я начинаю с Symfony и пытаюсь заставить пользователей видеть профиль других пользователей.
Шаблон моего профиля одинаков для всех, отображение информации основано на имени пользователя, которое передается в параметрах URL. Я просто сравниваю по ветке, если имя пользователя в сеансе и один в параметрах соответствуют.
Для примера на мой взгляд:
{% if app.user.username == userAccount.username%}
Мой профайл{% else%}
{{userAccount.username}} профиль{% 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();}}
Это верный способ убедиться, что пользователь правильный?
Я не знаю, хорош ли мой способ делать вещи, поэтому, если бы кто-то мог просветить меня, чтобы я мог продолжить или адаптировать свою работу.
Спасибо!
1 ответ
Twig выполняется на стороне сервера, поэтому, если ваш код написан правильно, я не вижу проблем с безопасностью. Запрос не может быть перехвачен таким образом.
Но если вы беспокоитесь (разработчики тоже могут ошибаться), я бы посоветовал разделить шаблоны и использовать одни и те же элементы.
Для части changePassword вам действительно нужно передать имя пользователя в запросе? У вас уже есть аутентифицированный пользователь в сеансе.