way two password openssl_decrypt mcrypt_encrypt encrypt code php encryption

php - two - ¿Qué debería saber todo desarrollador web sobre el cifrado?



php encrypt password (11)

Aprende la diferencia entre hash y encriptación. Los cifrados generalmente son interpretaciones bidireccionales de una cadena. Puedo encriptar mi contraseña y luego descifrarla en texto plano nuevamente. La idea detrás de hashes es que se conviertan en un ''cifrado'' de una sola vía.

En mis sitios guardo las contraseñas como hashes. Cada vez que un usuario inicia sesión, vuelvo a codificar la contraseña provista, la prueba contra el hash almacenado en la base de datos y apruebo si coinciden. No puedo enviarles su contraseña si la olvidan, ya que (en general) no tengo forma de saberlo. Dos cadenas diferentes pueden traducirse en el mismo hash, lo que hace que (generalmente) sea imposible saber cuál fue la cadena original.

Este es un tema que es bueno comprender con firmeza y discernir cuándo usar el cifrado frente a los hashes.

Acabo de aterrizar un concierto de PHP5. No manejaré las partes de la aplicación que involucran datos súper confidenciales, pero todavía sé muy poco sobre los métodos de seguridad y encriptación. Solo conozco los conceptos básicos (no almacene contraseñas en texto plano, no permita que los usuarios ejecuten código usando datos de publicaciones, etc.). ¿Qué necesito saber para mantener seguras mis aplicaciones y dónde puedo aprenderlas?


Consulte el Proyecto de seguridad de aplicaciones web abiertas . Tienen mucha información sobre los problemas actuales de seguridad de la aplicación web y sobre lo que debe hacer para defenderse de ellos. OWASP está armando una Guía de desarrollo que brinda mucha información útil sobre aplicaciones web y problemas de desarrollo de servicios web.




Por favor, preste atención a los siguientes puntos cuando almacene contraseñas,

  1. La contraseña hash es generalmente más segura porque no tienes que guardar un secreto. Sin embargo, le impide utilizar otro esquema basado en hash en su flujo de autenticación. Por ejemplo, no puede usar la autenticación HTTP Digest con contraseña hash.

  2. El hash simple es propenso al ataque de tabla arcoiris ( http://en.wikipedia.org/wiki/Rainbow_table ). Agregue un nonce no recurrente al hash o use el nonce como clave para HMAC. El nonce necesita ser almacenado con las contraseñas. Lo antepongo al resumen.

  3. Si se utiliza el cifrado, asegúrese de utilizar un Vector inicial aleatorio para que la misma contraseña se cifre en diferentes textos cifrados para diferentes usuarios. De lo contrario, eres propenso al ataque de coincidencia de patrones. MySQL tiene un comando de encriptación incorporado. No inyecta IV así que nunca lo use para contraseñas.

  4. Guarde el nombre / la versión de la clave con el texto cifrado para poder rotar las teclas. Se requiere rotación de teclas para cumplir con ciertos estándares. El cifrado sin información clave es imposible de descifrar cuando se ve obligado a cambiar o rotar las teclas.

Si sigues estos consejos, tus contraseñas estarán seguras con cualquier esquema de encriptación / hash.


Primero debes familiarizarte con los métodos de php:

Here tienes todas las extensiones de criptografía en PHP.


Que se puede romper sin importar lo que hagas.


Sepa que no debe escribir su propia funcionalidad de cifrado. Una biblioteca existente y confiable es la mejor manera de ir donde sea posible. Evite las tecnologías innovadoras que carecen de muchas horas exitosas de programador y horas de usuario detrás de ellas. Sepa que no confíe en la funcionalidad que elija hasta que la haya probado completamente, en primera persona. Manténgase al tanto de los nuevos desarrollos que pueden contrarrestar la funcionalidad elegida durante la noche. Sepa que solo porque está utilizando la mejor tecnología de cifrado disponible hoy en día que no ha protegido nada si deja las claves sobre la mesa (por ejemplo, texto sin formato no está en un caché o almacenado en otra tabla en la misma base de datos, claves privadas dejado en el abierto)


Si lo estás viendo desde un contexto PHP, te recomendaría este libro:

texto alternativo http://ecx.images-amazon.com/images/I/51sKhc8YUlL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

Seguridad Pro PHP en Amazon

Lo que realmente me gusta de este libro es que cubre mucho más que solo una lista de las funciones relacionadas con la seguridad en PHP. Una gran parte de este cubre conceptos generales de seguridad web y mecanismos de protección. Permisos, principio de privilegio mínimo, cifrado, hash, scripts entre sitios, falsificaciones de solicitudes entre sitios, secuestro de sesión, etc. están todos cubiertos aquí, con ejemplos de escritura de código seguro en PHP.

Después de haber tomado clases de seguridad de posgrado en la universidad, estoy impresionado con la cobertura de este libro. Considero que es una lectura obligatoria para cualquier desarrollador profesional de PHP.


La respuesta corta

Nunca puedes estar demasiado seguro

Use hashing de contraseña Salted para mayor seguridad

La respuesta más larga (aún no completa, sin embargo)

La seguridad no es algo que se aprenda con un tutorial rápido en la web. Requiere un conocimiento profundo de no solo qué vulnerabilidades existen, sino por qué existen y cómo funcionan. Uno de los mayores problemas (especialmente en código abierto) es que los nuevos métodos se agregan todo el tiempo, por lo tanto, debemos comprender conceptos de seguridad y teoría.

Lea libros, tome clases y pruebe las vulnerabilidades usted mismo en una máquina local. Luego, lentamente comenzará a comprender el concepto detrás de cómo asegurar una aplicación web.

Mira lo siguiente para comenzar

  1. Guía del desarrollador para la seguridad de las aplicaciones web
  2. Web Security Testing Cookbook
  3. Criptografía Aplicada

  • Comprender la diferencia entre encrypting y hashing
  • Comprenda el motivo de las salts
  • Comprender que HTTP es texto claro
  • Comprender qué es HTTPS
  • Comprenda que nunca (casi nunca) podrá crear mejores métodos de cifrado o hash que los que ya tienen las librerías de terceros y las bibliotecas incorporadas