Como verificar a força da senha?

Ola pessoal!!! estou fazendo um sistema de Single Sign On e ja consegui fazer a parte de autenticaçao do usuario cadastrado no banco de dados. Estou fazendo agora a parte de troca de senha e gostaria de colocar na tela aqueles medidores de senha que verifica se a senha e fraca, media ou forte. Se alguem souber me informar ficarei muito grato.

desde ja agradeço!!! :smiley:

Uma senha é forte se:

  • Ela tiver mais de 6 caracteres;
  • Ela não bater com nenhuma palavra de algum dicionário (listas de palavras da língua inglesa, portuguesa, espanhola etc. podem ser achadas tranqüilamente na Internet). Veja as seguintes variantes: a palavra toda em minúsculas, a palavra toda em maiúsculas, a primeira letra em maiúscula e as outras em minúsculas, a palavra sem acentuação, e a palavra invertida (por exemplo, “levísneerpmocni” é passível de ser encontrada no dicionário);
  • Ela bater com uma palavra de dicionário mais um número pequeno (de 1 a 3 dígitos) ou um número redondo (tipo “1000”). Por exemplo, “hamilton1000” é uma senha bastante provável para o sr. Hamilton.
  • Ela tiver pelo menos um dígito, uma letra minúscula, uma letra maiúscula e um caracter especial (como “&” ou mesmo “.”).
    Não aceite cadastrar senhas com acentos. Devido a problemas de “encoding” etc. você pode ter problemas de um cara conseguir se conectar a um sistema mas não a outro só porque os encodings são diferentes.
  • Ela não se parecer com uma data de nascimento (19/12/1980 ou 19121980 ou 1980) ou uma placa de carro (CPF-2339 ou CPF2333) ou um número de RG (12.233.334 ou 12233345) ou CPF ou CNPJ (120.234.545-12 ou 11.222.222/0001-11)
  • Escolha mais algum critério; estou listando os que estou me lembrando.

Se ela não preencher todos os requisitos acima, ela não é forte.
Se ela tiver um problema, ela seria média; se ela tiver mais de um problema, ela é fraca.

Existem varias formas

uma senha fraca seria:
-composta apenas por letras minusculas

  • pequena
    -uma senha ja utilizada

um senha média teria pelo menos um caracter diferente
uma senha forte teria pelo menos dois caracteres de classes diferentes (ex: uma letra maiuscula e um caracter especial )

A força dela é proporcional a quão dificil é quebra-la na força bruta. Palavras encontradas em um dicionario são senhas faceis que qualquer programa ‘bruteforce’ quebra em menos de um dia.

Um outro recurso simples é aplicar um delay de pelo 1 segundo, quando possivel, entre duas tentativa de login do mesmo usuario e, la pela terceira, pedir alem da senha, uma confirmação visual de alguma mensagem obfuscada em uma imagem (como a maioria dos sites fazem). Vc limitaria bastante o ataque a aplicação (sobrando outros tipos de ataque).

Recomendo a utilização de expressões regulares para auxiliar na criação de senhas.

Galera, acho que oque ele quer é aquele esquema em tempo real quando voce cria uma senha, igual a aqueles do Google, q conforme voce coloca a senha tem um medidor de nivel em tempo real pra dizer se a senha é STRONG - NORMAL - WEAK

Acredito que seja isso, a tecnologia deve ser Ajax mesmo, e as regras de senha devem ser definidas em Java

[]s

Dá um aolhada nesse site:

http://rumkin.com/tools/password/passchk.php

Dá pra baixar o codigo (GPL v3). Dependendo da licença do seu software, da pra usar. (;

Galera valeu pelas dicas!!!
encontrei esse javascript na net e vou ver se implemento ele na minha aplicaçao!!!
Mas de ante-mão agradeço a todos!!!

[code]function checa_seguranca(pass, campo){
var senha = document.getElementById(pass).value;
var entrada = 0;
var resultadoado;

    if(senha.length < 7){
            entrada = entrada - 1;
    }
    
    if(!senha.match(/[a-z_]/i) || !senha.match(/[0-9]/)){
            entrada = entrada - 1;
    }
    
    if(!senha.match(/\W/)){
            entrada = entrada - 1;
    }
    
    if(entrada == 0){
            resultado = 'A Segurança de sua senha é: <font color=#99C55D>EXCELENTE</font>';
    } else if(entrada == -1){
            resultado = 'A Segurança de sua senha é: <font color=#7F7FFF>BOM</font>';
    } else if(entrada == -2){
            resultado = 'A Segurança de sua senha é: <font color=#FF5F55>BAIXA</font>';
    } else if(entrada == -3){
            resultado = 'A Segurança de sua senha é: <font color=#A04040>MUITO BAIXA</font>';
    }
    
    document.getElementById(campo).innerHTML = resultado;
    
    return;

}[/code]

Veja esse: http://www.geekwisdom.com/dyn/passwdmeter

Olá pessoal estou tentando fazer um programa que testa a força da senha, e ele precisa mostrar se a senha é fraca, media ou forte, com desenhos
Desenhei uma label que mostra vermelho se é fraca, amarela media, e verde fraca, ela está com alguns erros, mas não é esse o caso, isso eu cuido dpois.
Quando ele digitar senhas que possuiem simbolos ele ganha mais pontuação, e assim por diante.
O problema é que não sei como faz por exemplo se ele digitar varias vezes o numero 1 como que eu faço para comparar digito por digito se são iguais, pois daí a senha seria fraca, eu tentei assim.

for (int i=0;i<password.length();i++){ 
            if (Pattern.matches("[0-9]", password)){
                count++;
            }
         }

eu fiz que o password fosse uma string, esse for está errado pois se eu digitar 1451 ele faz 4vezes uma comparação se contem numeros entre 0-9?
ele tinha que fazer apenas uma vez, certo?pq ele já percorre toda a string em uma só vez…?
como eu faria para uma variavel receber a quantidade de numeros repetidos que tem a senha???

OBS: o programa é em JAVA

Obrigada

[quote=Sávio]Ola pessoal!!! estou fazendo um sistema de Single Sign On e ja consegui fazer a parte de autenticaçao do usuario cadastrado no banco de dados. Estou fazendo agora a parte de troca de senha e gostaria de colocar na tela aqueles medidores de senha que verifica se a senha e fraca, media ou forte. Se alguem souber me informar ficarei muito grato.
[/quote]

A senha é tão mais forte quanto mais cirtérios de “força” ela passar.
Faça a lista dos critérios e some quantos a senha passa. Divida pelo numero de critérios. Isso é a força da senha.

O numero de critérios em si mesmo é irrelevante já que vc pode sempre adicionar mais.

Na maioria dos sites não existe critério nenhum. Isso significa que a força dela é zero (não infinito pela conta acima).

public static boolean validatePassword(final String password){
       Pattern p = Pattern.compile("^(?=.[0-9])(?=.[a-z])(?=.[A-Z])(?=.[@#$%^&+=])(?=\\S+$).{8,}$");
       Matcher m = p.matcher(password);
       return m.matches();
}