0

你好,

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

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

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

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

我的简历

{% 别的 %}

{{ userAccount.username }} 个人资料

{% 万一 %}

我的路由帐户的索引方法:

    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();}}

这是验证用户是否正确的可靠方法吗?

我不知道我的做事方式是否好,所以如果有人可以启发我,以便我可以继续或调整我的工作。

谢谢 !

4

1 回答 1

0

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

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

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

于 2019-02-20T18:03:26.690 回答