【发布时间】:2015-04-19 21:48:15
【问题描述】:
在 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”如何造成/可能造成安全问题?
添加: 我还要补充一点,我有点理解理论杂质,两种信息存储在同一个变量中(编码密码和纯密码)......但如果纯密码总是被即时编码(这很容易检查) ,这似乎是一个虚拟问题。我错了吗?
添加 2: 是不是(理论上)使用普通密码引入第二个变量会增加风险 - 因为在某些情况下不能调用 eraseCredentials(例如 https://github.com/symfony/symfony/issues/13287 )? O_o
【问题讨论】:
标签: symfony