https://github.com/ninomiquelino/php-auth-system
Sistema de Login e Sessão simples e seguro construído com PHP POO, utilizando PDO e SQLite para armazenar senhas hasheadas com password_hash() (BCRYPT). Foca na gestão segura de autenticação.
https://github.com/ninomiquelino/php-auth-system
css hashing html javascript login pdo php secure-login session sqlite tailwindcss
Last synced: 2 months ago
JSON representation
Sistema de Login e Sessão simples e seguro construído com PHP POO, utilizando PDO e SQLite para armazenar senhas hasheadas com password_hash() (BCRYPT). Foca na gestão segura de autenticação.
- Host: GitHub
- URL: https://github.com/ninomiquelino/php-auth-system
- Owner: NinoMiquelino
- License: mit
- Created: 2025-10-24T22:12:16.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-10-24T23:12:05.000Z (8 months ago)
- Last Synced: 2025-10-25T00:18:53.784Z (8 months ago)
- Topics: css, hashing, html, javascript, login, pdo, php, secure-login, session, sqlite, tailwindcss
- Language: PHP
- Homepage:
- Size: 60.5 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## 👨💻 Autor
---
## 🔐 PHP Secure Login System (PDO, Hashing, Sessions)









Este projeto é um exercício crucial focado nos pilares da Segurança e Autenticação em PHP: Hashing de senhas, gerenciamento de sessões e controle de acesso a páginas restritas.
Ele integra o uso de Programação Orientada a Objetos (POO) e PDO (PHP Data Objects) para garantir que todas as operações sejam seguras e robustas.
---
## 🔒 Recursos de Segurança e Tecnologia
- **Hashing Seguro (password_hash):** As senhas não são armazenadas em texto simples. Utilizamos a função `password_hash()` com o algoritmo BCRYPT (o padrão recomendado) para hashear a senha antes de salvar no banco.
- **Verificação Segura (password_verify):** A função `password_verify()` é usada para comparar a senha fornecida pelo usuário com o hash armazenado, prevenindo ataques de timing e garantindo a segurança.
- **Gerenciamento de Sessão:** O fluxo de login e logout utiliza as funções nativas de sessão do PHP (`session_start()`, `$_SESSION`, `session_destroy()`) para rastrear o estado do usuário.
- **Controle de Acesso:** A página `restricted.php` verifica o status da sessão antes de renderizar qualquer conteúdo, redirecionando o usuário não autenticado.
- **POO com PDO:** Uma classe `AuthManager` encapsula toda a lógica de segurança e comunicação com o banco de dados SQLite, mantendo o código limpo e organizado.
---
## 🧠 Tecnologias utilizadas
- **Backend:** PHP 7.4+ (POO, Sessões, password_hash/password_verify)
- **Segurança:** PDO (Statements Preparados) para comunicação segura com o banco de dados
- **Banco de Dados:** SQLite (arquivo único para armazenar usuários e hashes)
- **Frontend:** HTML e Tailwind CSS
---
## 🧩 Estrutura do Projeto
```
php-auth-system/
├── login.html
├── restricted.php
├── AuthManager.php
├── init_db.php
├── app.php
├── README.md
├── .gitignore
└── users.sqlite
```
---
## ⚙️ Configuração e Instalação
Pré-requisitos
Um ambiente de servidor web com PHP.
A extensão PDO SQLite precisa estar habilitada no seu php.ini.
1. Estrutura e Banco de Dados
1. Crie a estrutura de pastas conforme o diagrama do projeto.
2. Crie o banco de dados e o usuário de teste:
Abra o terminal na pasta raiz do projeto (/php-auth-system) e execute o script de inicialização:
```bash
php src/init_db.php
```
Este comando criará o arquivo src/users.sqlite e inserirá o usuário de teste com a senha hasheada.
3. Defina as permissões: Garanta que a pasta src/ (onde o users.sqlite será criado) tenha permissão de escrita para o usuário do servidor web (ex: chmod 777 src/).
2. Executar o Servidor
Utilize o servidor embutido do PHP para testes (a partir da raiz do projeto):
```bash
php -S localhost:8001
```
- **Acesse:** A página de login inicial é [http://localhost:8001/public/login.html](http://localhost:8001/public/login.html).
---
### Passos de Teste
1. **Acesso Inicial:** Abra `login.html`.
2. **Credenciais de Teste:**
- Usuário: `admin`
- Senha: `senha123`
3. **Tentativa de Acesso Direto:**
Tente acessar `http://localhost:8001/public/restricted.php` diretamente.
Você será redirecionado para a página de login com a mensagem "Acesso negado".
4. **Login com Sucesso:** Insira as credenciais de teste.
O `app.php` verificará o hash, iniciará a sessão e redirecionará para `restricted.php`.
5. **Logout:** Clique no botão **"Sair (Logout)"**.
O `app.php` destruirá a sessão e redirecionará de volta para `login.html`.
---
## 🤝 Contribuições
Contribuições são sempre bem-vindas!
Sinta-se à vontade para abrir uma [*issue*](https://github.com/NinoMiquelino/php-auth-system/issues) com sugestões ou enviar um [*pull request*](https://github.com/NinoMiquelino/php-auth-system/pulls) com melhorias.
---
## 💬 Contato
📧 [Entre em contato pelo LinkedIn](https://www.linkedin.com/in/onivaldomiquelino/)
💻 Desenvolvido por **Onivaldo Miquelino**
---