【问题标题】:Why exactly eraseCredentials is needed/recommended?为什么需要/推荐使用eraseCredentials?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-23
      • 2017-11-04
      • 2011-10-22
      • 2011-04-11
      • 2021-10-12
      • 2012-12-07
      • 2012-05-16
      • 2020-06-29
      相关资源
      最近更新 更多