首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2安全性:在代码中使用加密设置

Symfony2安全性:在代码中使用加密设置
EN

Stack Overflow用户
提问于 2015-01-09 19:11:27
回答 2查看 375关注 0票数 1

我使用security.yml配置密码加密:

代码语言:javascript
复制
encoders:
    Acme\UserBundle\Entity\User:
        algorithm: bcrypt
        cost: 10

现在我想在我的用户实体中更新用户密码,这样在Entity\User.php中的某个地方我应该有如下内容:

代码语言:javascript
复制
$this->password = password_hash($password, PASSWORD_DEFAULT, ['cost' => 10]);

但让我们想象一下,有时有人会决定将加密成本值更改为20,并更新security.yml。很容易忘记自定义加密代码。

我可以在我的代码中使用security.yml中的设置来使解决方案更通用,对更改更友好吗?

EN

回答 2

Stack Overflow用户

发布于 2015-01-09 20:01:18

直接从security.yml中提取东西有点挑战,而且你真的不想这样做。您可以使用与安全系统相同的密码编码器。

代码语言:javascript
复制
$encoderFactory = $this->get('security.encoder_factory');

$encoder = $encoderFactory->getEncoder($user);

$passwordEncrypted = $encoder->encodePassword($passwordPlaintext,$user->getSalt());

可以考虑看看FOSUserBundle UserManager类。它有一些有用的技术。

票数 1
EN

Stack Overflow用户

发布于 2015-01-09 20:21:40

不应在实体内手动编码密码。更好的做法是让实体完全不可知,只将编码后的结果传递给setPassword()

但是,您仍然可以在实体外手动执行此操作,例如在服务中,在这种情况下,最好从容器中获取密码编码器工厂服务(或者更好地注入它),而不是尝试自己重现算法:

代码语言:javascript
复制
$encoder = $this->container->get('security.encoder_factory')->getEncoder($user);
$user->setPassword($encoder->encodePassword('p4ssw0rd', $user->getSalt()));

此外,使用Bcrypt的另一个好处是,您可以随时更改成本,而无需担心同时更新数据库中的所有密码。它仍然能够使用旧设置检查密码,例如,您可以在下次登录时使用更强的安全设置来更新数据库中的密码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27859259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档