Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diego Velox

Como mostrar captcha na quarta tentativa de login?

Recommended Posts

Seguinte, fiz uma página de login MAS assim que entra nessa página de login já mostra o captcha... sei que isso é chato para um usuário que já é cadastrado no site, queria que o captcha aparecece só quando o usuário errar 3 vezes, ou seja, só na quarta tentativa... não tenho muitas noções de programação, como faria isso? Via cookies ou ip ou os dois ou até mesmo existe outra forma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué... remova o Captcha! :P

Qual a "segurança" deste recurso apenas na quarta tentativa?

evitar que alguem fique tentando logar uma conta no estilo sorte

 

Seguinte, fiz uma página de login MAS assim que entra nessa página de login já mostra o captcha... sei que isso é chato para um usuário que já é cadastrado no site, queria que o captcha aparecece só quando o usuário errar 3 vezes, ou seja, só na quarta tentativa... não tenho muitas noções de programação, como faria isso? Via cookies ou ip ou os dois ou até mesmo existe outra forma?

use session

1 tentativa => session[ 'tentativa_numero' ] = 1

2 tentativa => session[ 'tentativa_numero' ] = 2

if( session[ 'tentativa_numero' ] === 4 )

mostra captcha

Compartilhar este post


Link para o post
Compartilhar em outros sites

evitar que alguem fique tentando logar uma conta no estilo sorte

 

Continua sem fazer sentido, "alguém" vai poder aplicar este método de qualquer maneira.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua sem fazer sentido, "alguém" vai poder aplicar este método de qualquer maneira.

 

O sentido disso e de certificar que quem esta tentando fazer o login errando eh uma pessoa e não um robozinho.

 

você pode ir no orkut e errar algumas vez sua senha, ele vai abrir um captcha para você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O sentido disso e de certificar que quem esta tentando fazer o login errando eh uma pessoa e não um robozinho.

 

você pode ir no orkut e errar algumas vez sua senha, ele vai abrir um captcha para você.

 

Acertou em cheio, foi baseado no Orkut mesmo que estou querendo fazer isso, tem gente que nem pensa antes de postar é f* mesmo

 

use session

1 tentativa => session[ 'tentativa_numero' ] = 1

2 tentativa => session[ 'tentativa_numero' ] = 2

if( session[ 'tentativa_numero' ] === 4 )

mostra captcha

 

Valeu vou tentar isso, valeu mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores...

 

Qualquer pessoa que tenha vontade de colocar um "robozinho" para acessar o site, e tendo o conhecimento de que o captcha aparece após a primeira, segunda ou vigésima tentativa, simples, feche a sessão e tente novamente, ou seja, o captcha nunca vai aparecer para o "robozinho".

 

Mas vá lá, implemente sua solução! :)

 

Só pra avisar, pela sessão não resolve.

Isto se sua intenção com uso do captcha for para prevenir ataques.

 

Ps.: HB... comentários com poucos asteriscos são aceitos? beleza! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores...

 

Qualquer pessoa que tenha vontade de colocar um "robozinho" para acessar o site, e tendo o conhecimento de que o captcha aparece após a primeira, segunda ou vigésima tentativa, simples, feche a sessão e tente novamente, ou seja, o captcha nunca vai aparecer para o "robozinho".

 

Mas vá lá, implemente sua solução! :)

 

Só pra avisar, pela sessão não resolve.

Isto se sua intenção com uso do captcha for para prevenir ataques.

 

Ps.: HB... comentários com poucos asteriscos são aceitos? beleza! ;)

 

Então como o sr. explica o sistema usado no Orkut?

 

E outra, como ele vai fechar a sessão (sou noob nisso rsrsrs)

Compartilhar este post


Link para o post
Compartilhar em outros sites

A autenticação do Google usa token. Não vou saber te falar com precisão como o serviço de autenticação do Google aplica as regras para aparecer o Captcha ou não, mas se você fizer vários testes seguidos vai perceber que o Captcha não aparece sempre.

http://code.google.com/intl/pt-BR/apis/accounts/docs/AuthSub.html

 

Não sei se seu objetivo é implementar um comportamento equivalente ao do Google, mas em todo caso você encontra alguns exemplos na net de como implementar uma autenticação por token usando PHP.

 

Boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A autenticação do Google usa token. Não vou saber te falar com precisão como o serviço de autenticação do Google aplica as regras para aparecer o Captcha ou não, mas se você fizer vários testes seguidos vai perceber que o Captcha não aparece sempre.

http://code.google.com/intl/pt-BR/apis/accounts/docs/AuthSub.html

 

Não sei se seu objetivo é implementar um comportamento equivalente ao do Google, mas em todo caso você encontra alguns exemplos na net de como implementar uma autenticação por token usando PHP.

 

Boa sorte.

nuussss impossivel pra mim, será q só de gravar o ip do usuário no banco de dados seria uma boa alternativa? ou esses robos trocam de ip sempre?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem... aí é por sua conta.

Dê uma pesquisada por CSRF e PHP no Google que você deve encontrar um caminho para a sua solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

evitar que alguem fique tentando logar uma conta no estilo sorte

 

 

use session

1 tentativa => session[ 'tentativa_numero' ] = 1

2 tentativa => session[ 'tentativa_numero' ] = 2

if( session[ 'tentativa_numero' ] === 4 )

mostra captcha

ali no if session usa > 3 pq senao so na tentativa 4 ele mostra o captcha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que esse tópico já é um pouco antigo, mas resolvi postar para ajudar quem passar pelo tópico precisando montar esse sistema captcha. Então vamos lá!

 

"Não há como o invasor fechar sua SESSION se você estiver usando token junta da verificação."

 

Ao inves de fazer:

if(session['tentativa_numero'] > 4)

Faça: (OBS: O código abaixo está com verificação do token, se você ainda não sabe o que é, pesquise no google)

session_start();

if($_SESSION["csrfToken"]==$_POST["csrfToken"]){
 /*
 AQUI VAI SEU CODIGO NORMAL ATÉ A PARTE EM QUE VOCÊ VERIFICA SE O DADOS ESTÃO ENCORRETOS. SE ESTIIVEREM VOCÊ COLOCA O CODIGO ABAIXO
 */
 //Verifique se é a primeira vez que o usuário errou o login
 if(isset($_SESSION['jkhhu9'])){

  $expl = explode(" ",$_SESSION['jkhhu9'])

  //Verifica se a SESSION foi modificada.
  if(isset($expl['0']{0}) and (int)$expl['0']){
  
   if($expl['1']==rand(2,4)){
    //mostra o Captcha...
   }else{
    //não mostra o captcha...
   }
  }else{
   die("Ops! Ocorreu um erro de segurança!");
  }
  
 }else{

  $_SESSION['jkhhu9'] = "1 ".rand(2,4); //Você também pode ao invés da função rand, colocar um numero de 2 á 4.

 }
}else{
 die("Ops! Ocorreu um erro de segurança!");
}

 

Basicamente esse sistema gera uma SESSION "jkhhu9" com um numero randômico entre 2 á 4 se o usuário errar o login, e se o mesmo usuário errar novamente, o sistema verificara se o numero da SESSION é igual a um numero randomico entre 2 á 4. Caso seja mostra o Captcha.

 

O sistema é eficaz porque o invasor nunca saberá quando o captcha aparecerá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tinha um sistema aqui no notebook, que bloqueava o IP do usuário após a 5° tentativa só que utilizava MySQL e é bem simples por sinal, era uma coluna chamada failedlogins ou algo do tipo, e a cada erro de login acrescentava +1 o resto não preciso continuar né ?

 

Edit: Achei aqui, é o WHMCS que tenho, veja esse pedacinho:

 

if( $login_unm )
{
	$result = update_query( "tbladmins", array( "loginattempts" => "+1" ), array(
		"username" => $login_unm
	) );
	$loginattempts = get_query_val( "tbladmins", "loginattempts", array(
		"username" => $login_unm
	) );
	if( 3 <= $loginattempts )
	{
		insert_query( "tblbannedips", array(
			"ip" => $remote_ip,
			"reason" => "3 Invalid Login Attempts",
			"expires" => $expire_date
		) );
		update_query( "tbladmins", array( "loginattempts" => "0" ), array(
			"username" => $login_unm
		) );
	}
	sendAdminNotification( "system", "WHMCS Admin Failed Login Attempt", "<p>A recent login attempt failed.  Details of the attempt are below.</p><p>Date/Time: ".date( "d/m/Y H:i:s" )."<br>Username: {$username}<br>IP Address: {$remote_ip}<br>Hostname: ".gethostbyaddr( $remote_ip )."</p>" );
	logActivity( "Failed Admin Login Attempt - Username: {$username}" );
}
else
{
	sendAdminNotification( "system", "WHMCS Admin Failed Login Attempt", "<p>A recent login attempt failed.  Details of the attempt are below.</p><p>Date/Time: ".date( "d/m/Y H:i:s" )."<br>IP Address: {$remote_ip}<br>Hostname: ".gethostbyaddr( $remote_ip )."</p>" );
	logActivity( "Failed Admin Login Attempt - IP: {$remote_ip}" );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.