为什么需要/推荐eraseCredentials?

时间:2015-04-19 21:48:15

标签: symfony

在Symfony2中,在UserInterface中是一个名为“eraseCredentials”的方法,它在文档中描述为:

  

从用户中删除敏感数据。

     

如果在任何给定点上,明文密码等敏感信息都存储在此对象上,这一点非常重要。

但是,假设我们有一个注册表格:

$form = $this->createFormBuilder($user, array(
        'data_class' => 'Yoda\UserBundle\Entity\User',
    ))
    ->add('username', 'text')
    ->add('email', 'text')
    ->add('password', 'repeated', array(
          'type' => 'password',
         ))
    ->getForm()
;

$form->handleRequest($request);
if ($form->isValid()) {

    $user = $form->getData();
    $user->setPassword($this->encodePassword($user, $user->getPassword()));

    $em = $this->getDoctrine()->getManager();
    $em->persist($user);
    $em->flush();
}

似乎用户普通密码正在被立即更换。使用默认登录机制时,Symfony2身份验证系统的内部是一个问题(但如果是 - 为什么Symfony2无法在内部处理它?)?有人可以解释,如何不使用“eraseCredentials”使/可能出现安全问题?

加了: 我还要补充一点,我有点理解THEORETICAL杂质,两种信息存储在同一个变量中(编码和普通密码)......但是如果普通密码总是立即编码(很容易检查) ,这似乎是一个虚拟问题。我错了吗?

已添加2: 是不是(理论上)用普通密码引入第二个变量增加风险 - 因为在某些情况下可能不会调用eraseCredentials(例如。https://github.com/symfony/symfony/issues/13287)?? O_O

1 个答案:

答案 0 :(得分:0)

我可以想到当您使用ajax返回水合用户实体时,您可能希望临时删除敏感数据,如普通密码,银行帐户等等。