2011-08-25 11 views
5

Estoy tratando de verificar, si un usuario ha creado una contraseña que contiene símbolos (incluidos los signos +, -, =) O/Y números. ¿Cómo puedo hacer eso?Enforcing Strong Password con PHP

function check_password($str) 
{ 

    if (!preg_match ("/[&@<>%\*\,\^!#$%().]/i", $str)) 

    { 
     $this->form_validation->set_message('check_password', 'Your password should contain a number,letter,and special characters"'); 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
    } 

} 

Gracias.

+0

¿Respondió su pregunta? – Dani

+11

Personalmente, * odio * sitios que me obligan a tener un personaje especial extraño en mi contraseña. Porque el único efecto que tengo sobre mí es que tiendo a olvidarlo, y necesito escribirlo, creando un agujero de seguridad en el proceso: un agujero más grande que un ataque de diccionario si lo haces * alguna * tasa de limitación en intentos de acceso. –

+0

¿Qué sucede si quiero usar un '_'? '' –

Respuesta

2

No es necesario que liste todos los caracteres. Todo lo que no es un número o una letra es un carácter especial (o espacio):

(?:[^0-9A-z]|[0-9]) 
7

Mi sugerencia para la comprobación de la contraseña es romper cada requisito tiene en regexs separados, en particular:

$regexs = array(
       '/[0-9]+/', // Numbers 
       '/[a-z]+/', // Lower Case Letters 
       '/[A-Z]+/', // Upper Case Letters 
       '/[+-=]+/', // Your list of allowable symbols. 
    ); 

Inicialice un contador a 0. Para cada expresión regular, pruebe para ver si coincide. Si lo hace, aumente el contador en 1. Luego, devuelva true si el contador es mayor que 3 (o 4 si desea que tengan una contraseña realmente sólida); de lo contrario, devuelva false.

Creo que esto sería mucho más fácil de mantener a largo plazo si sus requisitos cambian alguna vez.

0

Recomiendo mirar en una dirección diferente. Si va a imponer una restricción, solo solicite que sea más larga. Como se ha señalado, el uso de símbolos probablemente hará que el usuario olvide la contraseña y nunca regrese a su sitio. Para obtener la máxima seguridad, publique el siguiente cómic en la página de registro: http://xkcd.com/936/

Cuestiones relacionadas