在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
答案 0 :(得分:0)
我可以想到当您使用ajax返回水合用户实体时,您可能希望临时删除敏感数据,如普通密码,银行帐户等等。