De un artículo de la revista Smashing 2012 Se hace una declaración bastante audaz para evitar AES en MySQL. O como dicen "¿Por qué debes evitar AES en MySQL?". Sin embargo, si busca el cifrado de SQL, a menudo encuentra el AES_ENCRYPT
de (Mi) SQL mencionado. No estoy diciendo que muchos resultados de búsqueda signifiquen que la afirmación no es cierta, pero me hizo pensar: ¿son las tres razones citadas a continuación realmente verdaderas?
¿Qué piensan los expertos en seguridad aquí acerca de las razones por las que Mcrypt de PHP es superior a las funciones AES de MySQL ?:
- MySQL necesita un enlace de base de datos entre la aplicación y la base de datos para que se produzca el cifrado y el descifrado. Esto podría ocasionar problemas de escalabilidad innecesarios y errores fatales si la base de datos tiene fallas internas, lo que hace que su aplicación sea inutilizable.
No puedo entender este problema; Si encripta / desencripta en PHP, también necesita almacenar los valores en la base de datos con un enlace a la base de datos. Si el descifrado falla en el lado de php, esto también conduce a fallas en la aplicación? ¿Cuál es el punto señalado aquí?
- PHP puede hacer el mismo descifrado y cifrado de MySQL con un poco de esfuerzo pero sin una conexión de base de datos, lo que mejora la velocidad y la eficiencia de la aplicación.
¿Php puede hacerlo "con un poco de esfuerzo" y eso mejora la velocidad de la aplicación? ¿Porque está encriptando antes de que se envíe por cable, la aplicación (que manejará el encriptado) gana mayor velocidad y eficiencia? ¿Cómo podría ser verdad? En mi opinión, se trata de la "mejor herramienta para el trabajo", por lo que el argumento de que "php también es capaz" no significa que sea la herramienta best también. Es solo una herramienta a , sin el argumento de por qué es la mejor herramienta.
- MySQL a menudo registra transacciones, por lo que si el servidor de la base de datos se ha comprometido, el archivo de registro generará la clave de cifrado y el valor original.
Este es un punto válido si encripta los valores en la base de datos y tiene activado el registro. Al menos debe desactivar el registro de consultas generales como registro binario solo registra transacciones pero no declaraciones selectas. Si no necesita ningún registro en absoluto, simplemente puede hacer la declaración "si usa AES en MySQL, desactive todos los registros". Eso me parece más válido que "si quieres usar AES en MySQL, hazlo en PHP".
¿Puede alguien explicarme por qué los puntos anteriores pueden ser válidos y por qué, en general, es mejor cifrar sus datos en su aplicación (php) en lugar de en (My) SQL?