Php 使用Symfony在数据库中安全存储用户数据
我想存储来自用户的数据,这样即使数据库以某种方式泄漏,它们也会变得无用。我也不想对数据进行加密,因此我通过“openssl_encrypt”对所有数据进行加密,如下所示:Php 使用Symfony在数据库中安全存储用户数据,php,symfony,security,encryption,Php,Symfony,Security,Encryption,我想存储来自用户的数据,这样即使数据库以某种方式泄漏,它们也会变得无用。我也不想对数据进行加密,因此我通过“openssl_encrypt”对所有数据进行加密,如下所示: $passCode = base64_encode($this->get('session')->get('_pk')); if (strlen($passCode) <= 16) { $iv = str_pad($passCode, 16, '0')
$passCode = base64_encode($this->get('session')->get('_pk'));
if (strlen($passCode) <= 16) {
$iv = str_pad($passCode, 16, '0');
} else {
$iv = substr($passCode, 0, 16);
}
$ciphertext = openssl_encrypt('whatevervalue', 'AES-256-CBC', $passCode, 0, $iv);
$test = new Test();
$test->setValue($ciphertext);
...
$em->persist($test);
$em->flush();
...
2个问题:
- 存储
(实际上不太了解会话)可能是一个安全问题$passCode
- 如果用户更改密码会发生什么情况。按照目前的方式,我需要用新密码解密并重新加密他的所有数据库数据,所以这似乎不是一个合适的解决方案。如果他泄露了密码怎么办
我不是这方面的专家,如果我错了,请告诉我。为什么不在数据库中存储数据时尝试使用数据序列化/非序列化。一般建议:使用而不是
openssl\u encrypt()
。具体而言,KeyProtectedByPassword
将引起您的兴趣。
<?php
namespace AppBundle\Listener;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class SecurityListener
{
public function __construct($security, Session $session)
{
$this->security = $security;
$this->session = $session;
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$this->session->set('_pk', base64_encode($event->getRequest()->get('_password')));
}
}