Cifrado para los datos que debes descifrar: usa variables para establecer la clave.
- No registre las consultas que contienen la entrada del usuario, contendrán los datos que está cifrando. Si tiene que iniciar sesión, no le dé al usuario de la base de datos los privilegios de lectura en el registro
- No ejecute su base de datos como usuario privilegiado (por ejemplo, sistema local / raíz)
- Almacene la clave por separado de la aplicación PHP y cree una instancia de la variable cuando se inicie la base de datos
- Cifre la clave con otra clave a la que solo la raíz pueda acceder, openssl en bash es candidato para hacer esto. El usuario de la base de datos no debe tener acceso directo tanto a la clave como a la clave de cifrado de la clave.
Hashes salados para datos que solo necesita verificar (Contraseñas).
Salting es increíblemente importante. No puedo subrayar esto lo suficiente. Utilizando un dispositivo relativamente económico (aproximadamente 2k), puedo ejecutar 100 hash por segundo en la mayoría de los algos, un dispositivo de extremo superior (~ 6k - usado principalmente para fines industriales). Puedo alcanzar más de 1,2 billones de hashes por segundo (sha, md5, md4, etc.) Si su atacante tiene una granja de FPGA, los trillones de conjeturas por segundo no son descabellados. Puede ver las estadísticas aquí
Usando el código de John y el código no optimizado, la lista de Linkedin (hashes without salt) se calculó en un ~ 70% usando las reglas de gestión predeterminadas en menos de 24 horas ... Sal de sus Hashes. Cuando su base de datos esté expuesta, esto le dará tiempo para informar a sus usuarios para cambiar sus contraseñas sin comprometer (necesariamente) inmediatamente su acceso.
No lo guarde si no lo necesita.
Sé que esta no es directamente la pregunta, pero en serio, es igual de importante. Suponiendo que su base de datos esté comprometida en algún momento, si no tiene datos, no podrá ser expuesta.
Último: use las mejores prácticas de seguridad para las bases de datos: valide sus datos, utilice procedimientos almacenados para procesar las entradas y supervise + audite sus registros de acceso a la base de datos.