Symfony 4-用户的配置文件系统安全吗?

时间:2019-02-20 17:21:09

标签: symfony symfony4 symfony-4.2

Bonjour

我从Symfony开始,并且试图让用户看到其他用户的个人资料。

我的个人资料模板对于每个人都是相同的,信息的显示基于URL参数中传递的用户名。如果会话中的用户名和参数中的用户名相对应,我只是在树枝上进行比较。

例如,在我的个人资料视图中:

  

{%,如果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 个答案:

答案 0 :(得分:0)

Twig是在服务器端执行的,因此,如果您的代码编写正确,那么我看不到任何安全问题。无法以这种方式拦截查询。

但是如果您担心(开发人员也可能会犯错误),我建议您分开模板并共享相同的元素。

对于changePassword部分,您是否真的需要在请求中传递用户名?您已经在会话中拥有经过身份验证的用户。