Ir para conteúdo

Arquivado

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

Omar~

Ajuda em encontrar uma outra solução

Recommended Posts

Então, queria uma ajuda do pessoal que pudessem dar sugestões/idéias sobre como fazer algo assim de forma eficiente.

 

Uma das condições seria.... Por exemplo, ao falhar digitando errado no processo de login X vezes, bloquear aquela pessoa de tentar logar novamente durante um período de tempo.

Certo, mas isso é fácil, vejam uma questão que pensei.

<?php
if (isset($_COOKIE['errou']) && $_COOKIE['errou'] == 3) {
    setcookie('bloqueio', true, time() + (60 * 5), '/');
} else if (isset($_COOKIE['errou'])) {
    $up = $_COOKIE['errou'] += 1;
    setcookie('errou', $up, time() + (60 * 2), '/');
} else {
    setcookie('errou', 1, time() + (60 * 2), '/');
}
echo ("<pre>");
var_dump($_COOKIE);

No caso aqui se errou 3x um novo cookie é gerado, então no login checaria a existência desse cookie se sim não executaria o restante do código.

Beleza, funciona né.... Porém.....

Vamos supor que a pessoa configurou o navegador para não armazenar dados de navegação, ou o mesmo está em janela anônima, basta que ele fechando e abrindo o navegador para tentar descobrir senhas alheias.

 

Recentemente um amigo me passou um programa que ele mesmo fez ao qual faz isso: Abre o browser, acessa website e tenta logar com dados aleatórios, e armazena esses dados para não usar novamente, e fica repetindo a ação até descobrir o acesso de qualquer pessoa executando o login, foi até assustador a velocidade com que ele descobre dados de acesso! E foi por isso que me veio a preocupação de achar uma solução eficiente.

 

Lógico um captcha já solucionaria isso, mas francamente é muito chato obrigar o usuário a ter que ficar digitando um código para logar.

 

Outro caso que pensei seria armazenar no banco o IP e dados peculiares da máquina cujo teve erro ao logar. Mas isso não é eficiente, uma vez que isso não possui precisão, e o bloqueio pode acontecer com quem não tem nada haver com a história.

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, Omar~ disse:

Lógico um captcha já solucionaria isso, mas francamente é muito chato obrigar o usuário a ter que ficar digitando um código para logar.

Concordo que um captcha é chato, mas:

1 - Você conhece aquele captcha do google onde você simplesmente clica em "Não sou um robô"?

2 - Você pode colocar o captcha apenas após a segunda tentativa falha. E apenas depois tomar outras atitudes.

 

Sobre o IP, você pode bloquear se for um IPv6, pois não tem o problema da "imprecisão", já que ele é único para cada dispositivo.

Se for um IPv4, que é mais comum obviamente, você pode bloquear assim, por exemplo: sha1( IP + USER_AGENT ).

Isso iria pegar toda a descrição do navegador/sistema do usuário, com versão e tudo mais, unir com o IP e bloquear com uma razoável margem de segurança de que não estaria bloqueando outros usuários juntos indevidamente.

 

Daí você me diz: bom, ele pode mudar IP, pode mudar de navegador ou até mesmo declarar um user agent qualquer.

Sim, ele pode. Mas você já dificultou em 50% o processo que ele terá, que unidos com o captcha na X tentativa, vão impedir os ataques.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, uma forma muito eficiente de prevenir SPAM (e XSRF) é utilizando tokens. Veja um exemplo: https://pt.wikihow.com/Prevenir-Ataques-CSRF-em-PHP

Essa proteção é muito importante.

 

Outra que me lembrei, que não é tão eficaz, mas ajuda e é bem simples de implementar, é essa:

Coloque um input text com display:none com um name que pareça ser importante. Exemplo:

<input type="text" name="confirmation" id="confirmation">
<!-- e no css define que esse cara possui display:none -->

Agora basta verificar se esse campo foi digitado. Se for um bot automático (e não um ataque premeditado), vai enviar o form com isso preenchido, daí você bloqueia.

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Matheus Tavares disse:

 

Outra que me lembrei, que não é tão eficaz, mas ajuda e é bem simples de implementar, é essa:

Coloque um input text com display:none com um name que pareça ser importante. Exemplo:


<input type="text" name="confirmation" id="confirmation">
<!-- e no css define que esse cara possui display:none -->

Agora basta verificar se esse campo foi digitado. Se for um bot automático (e não um ataque premeditado), vai enviar o form com isso preenchido, daí você bloqueia.

 

 

Na verdade contra o programa que mencionei, testei e funciona como era de se esperar. Algo simples, que por sua vez um BOT não pode distinguir o que é válido um inválido em um formulário.

Eficiente com exceção se algum sacana querer mesmo ferrar o sistema de alguém, o que ele teria que estudar o código fonte do html e css para configurar seu programa de ataque para ignorar isso. Em todo caso daria um trabalho a mais para o sujeito.

 

Na verdade a questão de inputs aleatórios passou por minha cabeça. Pois acredito eu que o modo mais eficiente contra isso é fazer com que um programa automatizado não saiba o que fazer.

 

3 horas atrás, BrunoBit disse:

Cookie nesse caso pode descartar, não é eficiente. O que você está procurando se chama Rate Limit:

https://github.com/sunspikes/php-ratelimiter

https://github.com/touhonoob/RateLimit

 

Sim já conhecia isso, achei também viável.

 

Sobre dados da máquina + IP, USER_AGENT etc... Em testes, máquina idênticas em rede lan não foi possível distinguir uma da outra.

 

O caso do login foi só uma das pautas pois esse caso é mais fundo, recentemente mesmo aqui o iMasters sofreu um ataque similar, onde diversos tópicos foram criados. (Para mim quem planeja isso é uma pessoa sem carácter mesmo, pois não existe ganho pessoal ou material em tal ação)

 

Agora, tal segurança é desnecessário mediante a importância da aplicação. Então antes que algum leigo leia esse tópico e fique preocupado é bom deixar claro essa questão. Se você tem lá seu blogzinho... site... sei lá, algo que não armazene dados importante das pessoas não há o que se preocupar, dificilmente ou quase impossível alguém irá lançar um tipo de ataque contra sua aplicação.

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.