La novedad Más Importante de PHP 5.5 Relacionada Con La Seguridad es la Creación De Una nueva API párrafo Codificar y verificar Contraseñas. Ademas de Ser Muy Facil De utilizar, Sigue API this: Todas Las Buenas Prácticas de Seguridad Recomendadas párr Aplicaciones Modernas web.
Internamente la API utiliza la Función
crypt ()
y està available from version 5.5.0 de PHP. Si utilizas Una version anterior de PHP, Siempre Que Igual mar o un 5.3.7 superior, EXISTE Una Librería Con las Mismas Funcionalidades Que la nueva API: github.com/ircmaxell/password_compat .
Contraseñas Codificando
La Función Más Importante de la nueva API es
password_hash ()
, Que codifica la CONTRASEÑA Que le paSES Con El Algoritmo Indicado:
$ Password = password_hash ( 'admin1234' , PASSWORD_DEFAULT ) ;// $ Password = $ 2a $ 10 $ a8ThA3xOuWB6QPeFL / VRZeynSxoT6chW4RS1uh5l0xOBEePFnUNpG
El cebador Argumento de la Función es la CONTRASEÑA originales Codificar pecado y El Segundo Argumento Dębe Ser uña de Las Dos Siguientes Constantes:
PASSWORD_DEFAULT
, codifica la CONTRASEÑA utilizando el Algoritmobcrypt
y el RESULTADO es Una Cadena de 60 CARACTERES de Longitud, Cuyos PRIMEROS CARACTERES hijo$ 2y $ 10 $
. El Algoritmo utilizado y la Longitud de la CONTRASEÑA Codificada cambiarán en las Próximas Versiones de PHP, CUANDO SE Anadan Algoritmos todavia Más Seguros. Si guardas las Contraseñas En Una la Base de Datos, la pertenezcan Recomendación es Que se reserva 255 CARACTERES párr Ello y no los 60 Que se pueden utilizar ACTUALMENTE.PASSWORD_BCRYPT
, A Pesar de Su Nombre, codifica la CONTRASEÑA utilizando el AlgoritmoCRYPT_BLOWFISH
. Al Igual Que En El Caso anterior, la CONTRASEÑA Codificada OCUPA 60 CARACTERES baño total SIENDO los Primeros CARACTERES$ 2a $
.
$ Password = password_hash ( 'admin1234' , PASSWORD_DEFAULT ) ;// $ Password = $ 2a $ 10 $ a8ThA3xOuWB6QPeFL / VRZeynSxoT6chW4RS1uh5l0xOBEePFnUNpG$ Password = password_hash ( 'admin1234' , PASSWORD_BCRYPT ) ;// $ Password = $ 2a $ 10 $ 1Y2nAYh7gVThKyL2H / FkIuAqU0Z4ZZNUz3rqFNSbq7RiVoyWsXM5a
Aunque cueste creerlo te, ESTAS Funciones párr Codificar Contraseñas sí de han Diseñado una cola Propósito párr sean Muy Lentas y Para Que Siempre tarden el Mismo Tiempo en Obtener el RESULTADO. De this forma sí evitan los Ataques de Seguridad Conocidos Como timing attack .
El Tiempo Empleado en Codificar Una CONTRASEÑA sí denominador "Coste" y SE Puede Configurar MEDIANTE El Tercer Argumento opcional de la Función
password_hash ()
. El coste Por Defecto es 10
(POR ESO EL prefijo Tenerife Contraseñas Anteriores es $ 2a $ 10 $
) y do ESTAR Dębe valor comprendido Entre 04
y 31
. Si tu Servidor es Muy Potente, subir PUEDES El coste de la siguiente Manera:
$ Password = password_hash ( 'admin1234' , PASSWORD_DEFAULT ) ;// $ Password = $ 2a $ 10 $ a8ThA3xOuWB6QPeFL / VRZeynSxoT6chW4RS1uh5l0xOBEePFnUNpG$ Password = password_hash ( 'admin1234' , PASSWORD_DEFAULT , array ( 'cost' => 12 ) ) ;// $ Password = $ 2a $ 12 $ hrxMLCk3ZfKNEcY1lpTpMOD09TnHO5vlJp5CR4xYud7a4RACWoRFm$ Password = password_hash ( 'admin1234' , PASSWORD_DEFAULT , array ( 'cost' => 20 ) ) ;// $ Password = $ 2a $ 20 $ UX1pRArPfTNsUn8czY8AE.8OakctlMk6.or6OmQNQ.mpzyHvm29ki
La oficial pertenezcan Recomendación párrafo ELEGIR El coste Más adecuado párr tu Servidor es Que El Tiempo Empleado en Codificar Una CONTRASEÑA Entre mar
0,1
y 0,5
segundos.
Ademas del Coste, FUNCIÓN la
password_hash ()
Also permite Configurar la Opción sal
, Que Es El valor inical Que se utiliza párr Codificar la CONTRASEÑA. Se Recomienda no establecer this valor a mano y Dejar Que PHP mar Calcula lo Quien automaticamente. Si Quieres Saber de Como establecer this valor a mano, consulta la Documentación de password_hash () .
Si Hasta Ahora guardabas en la la Base de Datos Las Contraseñas Originales Porqué no sabias de Como codificarlas, ya no Excusa Tienes. Gracias a la nueva API párrafo Codificar Las Contraseñas, HACER las Cosas bien desde el Punto de Vista de la casa-seguridad cuesta todavia Menos Tiempo y Esfuerzo Que hacerlas mal.
Contraseñas Comprobando
Codificar las Contraseñas los antes de guardarlas en la la Base de Datos es SÓLO La Primera Parte del Problema. Despues, Chávez Cada ONU Que Quiera usuario conectarse un application tu, heno Que comprobar Que la CONTRASEÑA proporcionada es efectivamente La Misma Que se Guardo Codificada.
La Función nueva
password_verify ()
Simplifica this Trabajo al maximo, ya Que Solamente heno Que pasarle Como imprimación Argumento la CONTRASEÑA del usuario y de como Segundo Argumento la CONTRASEÑA Codificada:
$ originales = 'admin1234' ;$ Codificado = '$ 2a $ 10 $ a8ThA3xOuWB6QPeFL / VRZeynSxoT6chW4RS1uh5l0xOBEePFnUNpG' ;$ Iguales = password_verify ( $ inicial , $ Codificado ) ;si ( $ Iguales ) {echo 'PUEDES Pasar a la zona privada?' ;} otro {echo 'La CONTRASEÑA indicada no es correcta viene' ;}
Como las Contraseñas codificadas Por
password_hash ()
ya contienen en Do interior El coste y el sal
utilizados párrafo Codificar la CONTRASEÑA original, no heno Que Indicar NINGUN PARÁMETRO Más a la Función password_verify ()
.
Utilidades Otras
La nueva API párrafo Codificar Contraseñas includes Otras dos Funciones Menos Importantes. La Primera es
password_get_info ()
, devuelve Que array ONU estafa Información de la CONTRASEÑA Codificada Que se le pasa COMO Argumento:
$ Info = password_get_info ( '$ 2a $ 20 $ UX1pRArPfTNsUn8czY8AE.8OakctlMk6.or6OmQNQ.mpzyHvm29ki' ) ;$ Info = array ('Algo' => 1 , // Identificador del Algoritmo utilizado'AlgoName' => 'bcrypt' , // Nombre del Algoritmo utilizado'Opciones' => array ('Costo' => 20 // Coste utilizado en la Codificación)) ;
Si es tu Aplicación modificas estafa EL TIEMPO el Algoritmo o las OPCIONES párrafo Codificar Las Contraseñas, necesitarás comprobar si Una determinada CONTRASEÑA Dębe Ser recodificada o si cumple las Nuevas options. Para Ello PUEDES utilizar la Función
password_needs_rehash ()
, Pasando la CONTRASEÑA Codificada de Como imprimación Argumento, el Algoritmo Que se Dębe utilizar COMO Segundo Argumento y opcionalmente, las OPCIONES del Algoritmo de Como Tercer Argumento.
En El Ejemplo siguiente, sí pasa Una CONTRASEÑA Codificada Con El Algoritmo Por Defecto y la ONU Coste de
10
. Como Las Características Deseadas hijo el Algoritmo Por Defecto y la ONU Coste de 20
, el RESULTADO de la Función password_needs_rehash ()
Sera cierto
:
$ HayQueRecodificar = password_needs_rehash ('$ 2a $ 10 $ a8ThA3xOuWB6QPeFL / VRZeynSxoT6chW4RS1uh5l0xOBEePFnUNpG' ,PASSWORD_DEFAULT ,array ( 'cost' => 20 )) ;// $ HayQueRecodificar = true
Fuente:enlace
Si Quieres Seguir Aprendiendo con Nosotros, PUEDES ingresar a NuestrosInformación.
No hay comentarios:
Publicar un comentario