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();}}
这是验证用户身份的正确方法吗?
我不知道我的做事方式是否好,是否有人可以启发我,以便我继续或适应我的工作。
谢谢!
答案 0 :(得分:0)
Twig是在服务器端执行的,因此,如果您的代码编写正确,那么我看不到任何安全问题。无法以这种方式拦截查询。
但是如果您担心(开发人员也可能会犯错误),我建议您分开模板并共享相同的元素。
对于changePassword部分,您是否真的需要在请求中传递用户名?您已经在会话中拥有经过身份验证的用户。