• Pingback: Segurança em Sistemas de Login: Proteção Contra SQL Injection | Blog do Beraldo()

  • Gerson Novais

    Parceiro,

    Estou estudando sobre a segurança em se utilizar a tecnica “Manter-se conectado” e venho me espantando com a falta de soluções eficazes e seguras para essa técnica.

    O seus exemplos e funções, são até elegantes no quesito “Gravar Cookie” mas você não falou nada sobre os problemas Server Side dessa técnica. Um problema que vejo em todos os métodos de se manter essa técnica é o que impede que um sujeito faça um chupa cabra em um site, gravando em um banco de dados todos os Cookies de um usuário de seu site e depois utilizar um sistema para gerar os mesmos cookies na sua própria maquina e com isso acessar facilmente os principais sites, tendo acesso aos dados do usuário.

    Como você sugere que isso seja contornado no lado do servidor?

    Att,
    Gerson Novais

  • Olá, Gerson Novais.

    O fato de um usuário conseguir acesso à base de dados de um sistema não tem nada a ver com “permanecer logado” ou qualquer outro recurso. Acesso à base de dados é o maior risco em qualquer sistema, tenha ele a opção “permanecer logoado” ou não. Se alguém conseguir acessar sua base de dados, já era. O intruso terá muitas informações.

    Como isso não é diretamente ligado à segurança no uso de cookie, não abordei aqui.

    Existem vários pontos cruciais na segurança. A pior coisa que já vi foi o uso dos famosos “config.inc”, “config.ini”, todos no public_html do servidor. Os servidores WEB interpretam esses arquivos como texto, então você vê o código pelo navegador, sendo possível ver configurações de acesso à base de dados e muitas outras. O Google é a melhor ferramenta para um invasor encontrar esses arquivos. Uma simples busca por arquivos .inc com a palavra mysql retorna inúmeros reesultados. Todos eles são vulneráveis.

    Isso é um bom tema para um próximo artigo. Vou juntar informações e escrever algo sobre isso. :)

  • Leandro

    Apenas uma dúvida. O que acontece se um copiar o arquivo do cookie para outra máquina? Será que loga no sistema.

    Na teoria logaria, pq ele vai ler o que tá no cookie e bate com o que ta salvo na base.

    Não é isso?

  • Olá, Leandro

    É isso mesmo. Um cookie é um simples arquivo texto e pode estar em qualquer máquina. É tanto possível copiar um cookie para outro computador, quanto criar um cookie manualmente.

  • Marcelo de Carvalho

    Olá Beraldo,

    Parabéns e obrigado pela solução apresentada aqui, me foi de grande utilidade. Só me restou uma dúvida: caso o usuário tenha mais de um browser instalado, eles fatalmente vão ficar apagando o hash criado, e armazenado no banco de dados, pelo outro (pois cada navegador só enxerga o seu próprio cookie). haveria alguma solução para isso?

    Grato, Marcelo.

    • Até onde sei, não há como contornar isso. Cada navegador tem seus cookies. O que dá pra fazer é copiar um cookie do navegador X para o navegador Y, mas isso depende dos conhecimentos do usuário; sua aplicação não tem o que fazer para resolver esse “problema”.

  • Fred

    Muito bom !!!
    Prático, objetivo e eficiente e elegante.
    Apesar de já programar há muitos anos, ainda sou novato no desenvolvimento WEB. Parabéns pelo tutorial, me ajudou muito, respondeu todas as dúvidas sobre cookies seguros.

    Obrigado, Fred.

  • Alex

    No caso, se eu usei SHA1 com MD5, mas o cliente esqueceu a senha e quer recuperá-la, como devo proceder para desencriptografar? Sou novo em PHP não sei exatamente se esta é uma pergunta idiota. Obrigado!

    • Olá, Alex.

      Você deve fornecer uma nova senha para o usuário, pedindo para ele a alterar o mais breve possível. Ou pode gerar um link único para ele criar uma nova senha, como vários sites fazem atualmente.

      Recuperar a senha do usuário, criptografada com qualquer hash, é impossível. Por isso é necessário criar uma nova.

      Abraço

  • Leonardo

    Mas ainda continuamos com o problema do chupa cabra que o amigo disse. Eu salvo o quw tá no cookie do cara, jogo na mi ha maquina e pronto. Tento o mesmo acesso da outra pessoa. Fiz uns testes e até o facebook eu conseguir acessar assim. Qual seria a solução para isso?

    • Olá, Leonardo

      Se você quiser evitar que comprem com seu cartão de crédito, o que você faz? Você não passa o número para os outros, certo? O mesmo vale para os cookies. Eles têm dados pessoais. Se você não passar seus cookies para outros usuários, esse problema não existirá.

      É a mesma “falha de segurança” com senhas em geral. Se você passá-las a outras pessoas, elas acessarão suas contas.

      Abraço

  • Pingback: Segurança: Proteção Contra SQL Injection - Blog do Beraldo()

  • Nero

    Não leve para o pessoal, mas gerar um hash de outro e criar sua própria função para encriptar e checar senhas é desnecessário e vai gerar um resultado provavelmente não tão bom. Usar BCrypt, por uma série de motivos, é o ideal.
    Quanto as senhas, o ideal é que elas sejam encriptadas no servidor e armazenadas em um banco de dados. Não há problemas em submeter a senha em texto plano, desde que a página use um protocolo para assegurar a conexão, como TLS.

    • Olá. Agradeço sua contribuição.
      Há diversas formas de gerar hash ou criptografia de senhas. Outra possibilidade, mais recente, disponível a partir do PHP 5.5, é usando a função password_hash() http://php.net/password_hash