Autenticação de sites com PHP e MySQL
Neste artigo pretendo mostrar uma maneira fácil, simples e segura de fazer um sistema de autenticação em PHP com MySQL. Todas as sessões são registradas em um banco de dados com o IP, data e hora de acesso, deixando um enorme histórico excelente para futuras auditorias. Procurarei detalhar o máximo possível para facilitar a compreensão do artigo.
Entendendo como as coisas funcionam
O sistema de login será baseado na seguinte dinâmica:
Todos os arquivos php serão colocados na mesma pasta, sem distinção ou separação alguma. O usuário não autenticado terá acesso livre apenas à tela login.php, na qual não há exigência de autenticação.
Os demais arquivos desta pasta terão um comando na primeira linha que verificará se a autenticação foi positiva. Se for positiva, o restante da página será carregada, caso contrário, o usuário será redirecionado imediatamente para a página login.php.
A página login.php fará a verificação do usuário e senha. Se a autenticação for positiva, esta página redirecionará o cliente para uma outra qualquer, que pode ser inclusive uma index.php. Se a autenticação não for positiva, o cliente voltará à página de login.php.
Quanto as páginas em php, o sistema é totalmente seguro, desde que sejam obedecidas todas as regras que serão citadas aqui neste artigo.
Nos vários testes feitos visando burlar o sistema, em diferentes browsers, coloquei a URL completa de uma das páginas com conteúdo restrito, e em todos os testes, fui redirecionado para a página login.php.
Num outro teste, usei o lynx, navegador em modo texto muito simples, que, por este motivo, talvez não fosse manipulável pelo php, mas o resultado foi o mesmo dos anteriores.
Tentei ainda fazer um download de um arquivo restrito através do comando wget, mas independente do arquivo que eu escolha, o download só baixa o arquivo login.php e sem os códigos php, obviamente. Testei também com outros programas de download, inclusive do Windows, mas nenhum deles teve êxito.
Além de divulgar conhecimentos, um dos outros motivos pelo qual estou escrevendo este artigo é para que outras pessoas, com mais conhecimentos e outras técnicas, possam testar a segurança deste sistema e reportar aqui possíveis falhas que eu não enxergue. Agradeço a quem fizer isso.
Conhecimento básico de php e mysql também é necessário, pois não perderei muito tempo detalhando como funcionam os códigos - até porque este não é o intuito - mas sim, mostrando como fazer as autenticações e as integrações das páginas.
Além dos já citados, é importante também o conhecimento de HTML, pois os exemplos citados aqui estarão "crus" e sem nenhuma formatação. Somente os códigos em PHP.
Todos os arquivos php serão colocados na mesma pasta, sem distinção ou separação alguma. O usuário não autenticado terá acesso livre apenas à tela login.php, na qual não há exigência de autenticação.
Os demais arquivos desta pasta terão um comando na primeira linha que verificará se a autenticação foi positiva. Se for positiva, o restante da página será carregada, caso contrário, o usuário será redirecionado imediatamente para a página login.php.
A página login.php fará a verificação do usuário e senha. Se a autenticação for positiva, esta página redirecionará o cliente para uma outra qualquer, que pode ser inclusive uma index.php. Se a autenticação não for positiva, o cliente voltará à página de login.php.
Qual a segurança oferecida por este sistema de login?
Este sistema de login só fará restrição de acesso apenas às páginas em php. Qualquer outro arquivo que esteja na pasta, seja html, jpg, gif, doc, pdf ou qualquer outro, será exibido sem nenhuma restrição, mesmo que o usuário não tenha autenticado.Quanto as páginas em php, o sistema é totalmente seguro, desde que sejam obedecidas todas as regras que serão citadas aqui neste artigo.
Nos vários testes feitos visando burlar o sistema, em diferentes browsers, coloquei a URL completa de uma das páginas com conteúdo restrito, e em todos os testes, fui redirecionado para a página login.php.
Num outro teste, usei o lynx, navegador em modo texto muito simples, que, por este motivo, talvez não fosse manipulável pelo php, mas o resultado foi o mesmo dos anteriores.
Tentei ainda fazer um download de um arquivo restrito através do comando wget, mas independente do arquivo que eu escolha, o download só baixa o arquivo login.php e sem os códigos php, obviamente. Testei também com outros programas de download, inclusive do Windows, mas nenhum deles teve êxito.
Além de divulgar conhecimentos, um dos outros motivos pelo qual estou escrevendo este artigo é para que outras pessoas, com mais conhecimentos e outras técnicas, possam testar a segurança deste sistema e reportar aqui possíveis falhas que eu não enxergue. Agradeço a quem fizer isso.
Pré-requisitos para o sistema
Para que este sistema funcione, será necessário que o servidor tenha instalado o apache e que este tenha suporte ao php, sem esquecer do pacote php5-mysql. Deve também ter instalado e funcionando o MySql, bem como o phpmyadmin, que será usado nas explicações para criar os bancos de dados.Conhecimento básico de php e mysql também é necessário, pois não perderei muito tempo detalhando como funcionam os códigos - até porque este não é o intuito - mas sim, mostrando como fazer as autenticações e as integrações das páginas.
Além dos já citados, é importante também o conhecimento de HTML, pois os exemplos citados aqui estarão "crus" e sem nenhuma formatação. Somente os códigos em PHP.
Quanto aos arquivos com outras estensões que não php, não existe uma opção que faça o php processar todo e qualquer tipo de arquivo ? Seria meio que um disfarce para o arquivo onde o php intercepta o carregamento e faz todas as verificações como se quele fosse um arquivo php real.
Até mais.