Sistema web de gerenciamento de anotações desenvolvido em PHP puro com foco em segurança e criptografia, com autenticação de usuários, organização de notas, controle de perfil e registro de auditoria.
OBS: Partes do sistema estão em manutenção/adição.
VOCÊ PROVAVELMENTE VAI ENCONTRAR ALGUMAS "TODOS", estão sendo feitas em meu tempo livre.
README
│
├── Sobre o projeto
├── Funcionalidades
├── Tecnologias
├── Como rodar
├── Modelagem do Banco
├── Arquitetura
│ ├── App/Core + MVC
│ ├── Controllers
│ ├── Models
│ └── Views
├── Logs e Auditoria
├── Segurança
|── Conceitos aplicados
|── Decisões de arquitetura
└── Melhorias futuras
- Cadastro e autenticação de usuários
- Login e logout
- Gerenciamento de perfil
- Upload de foto de perfil
- Alteração de senha
- Criação de notas
- Edição de notas
- Exclusão de notas
- Visualização de notas
- Pesquisa e filtragem
- Registro de ações através de logs e auditoria (Em manutenção)
- Dashboard com informações da aplicação
- Interface responsiva
- Tema escuro
- PHP
- MySQL
- SQL
- HTML5
- CSS3
- Tailwind CSS
- DaisyUI
- JavaScript
- Git
- MVC
- PHP 8.5+
- MySQL
- Apache ou outro servidor web compatível
Clone o repositório: git clone https://github.com/AndreyMateus/lockbox
Para rodar o projeto localmente, você precisa de um ambiente que execute PHP.
Você pode usar qualquer uma das opções abaixo:
- XAMPP
- Laravel Herd
- Laragon
- WAMP
- Ou qualquer stack PHP similar
-
Instale um dos ambientes citados acima
-
Coloque o projeto dentro da pasta de servidor
-
Exemplo no XAMPP:
C:\xampp\htdocs\lockbox
-
-
Inicie o servidor (Apache)
-
Abra o navegador e acesse o seu localhost ou endereço definido pelo AMBIENTE (software que simula o servidor, Ex: xampp, Laravel herd, etc...)
Configure as credenciais do banco de dados no arquivo de configuração da aplicação em Core/Config/config.php.
Crie o banco de dados e execute o script SQL disponível no projeto para criar as tabelas necessárias em App/Database/database.sql.
Configure o servidor web para utilizar a pasta Public/ como diretório público da aplicação. (OPCIONAL)
Após a configuração, acesse o projeto através do servidor local.
A aplicação utiliza um banco de dados relacional para armazenar usuários, notas e informações relacionadas à auditoria.
Principais entidades:
A tabela users armazena os dados dos usuários.
A tabela notes armazena as anotações associadas aos usuários.
(Em implementação) As tabelas de auditoria registra eventos relevantes realizados na aplicação, permitindo rastrear determinadas operações, sendo um dos pilares da segurança da informação, conhecido como: NÃO REPUDIO.
O projeto utiliza uma arquitetura baseada em MVC, combinada com a separação entre App e Core.
A ideia é separar as responsabilidades da aplicação, evitando concentrar regras de negócio, acesso ao banco de dados, roteamento e apresentação em um único local.
Uma representação simplificada da estrutura:
Notes/
│
├── App/
│ ├── Controllers/
│ │ ├── Notes/
│ ├── Database/
│ ├── logs/
│ ├── Middlewares/
│ ├── Models/
│ ├── Views/
│ │ ├── notes/
│ │ ├── partials/
│ │ ├── template/
│
├── Core/
│ ├── Config/
│ ├── Helpers/
│ ├── Route/
│ ├── Utils/
│
├── Public/
│ ├── assets/
│ ├── uploads/
│ │ ├── profile_images/
│ └── index.php
│
├── .gitignore
├── .env
└── README.md
Padrão MVC
Os controllers recebem e processam as requisições da aplicação.
Eles são responsáveis por coordenar o fluxo da requisição, utilizando as demais camadas necessárias e encaminhando os dados para as views.
A intenção é evitar que o controller concentre diretamente regras de negócio ou consultas ao banco.
OBS: alguns controllers com bastante verbosidade de código estão utilizando o padrão de projeto SINGLE ACTION CONTROLLER
Os models representam as entidades e os dados utilizados pela aplicação.
Eles são utilizados em conjunto com as demais camadas para trabalhar com informações como usuários e notas.
As views são responsáveis pela apresentação dos dados ao usuário.
A camada de apresentação é mantida separada da lógica responsável pelo processamento das requisições e pelas regras da aplicação.
O sistema possui mecanismos de registro para acompanhar determinadas ações realizadas na aplicação.
Entre os eventos registrados estão operações relacionadas às notas e alterações relevantes realizadas pelo usuário.
A auditoria tem como objetivo fornecer rastreabilidade das operações realizadas no sistema.
Isso permite consultar posteriormente informações relacionadas a eventos ocorridos durante a utilização da aplicação.
O projeto utiliza algumas práticas para reduzir riscos comuns em aplicações web, incluindo:
- Prepared Statements através do PDO
- Validação dos dados recebidos
- Validação do MIMETYPE dos arquivos recebidos (Validação de uploads)
- Sanitização da saída utilizando
htmlspecialchars() - Controle de sessão
- Controle de acesso às áreas autenticadas
- Proteção de informações sensíveis
- Separação entre arquivos públicos e código interno
- Senhas armazenadas utilizando hashing
Informações sensíveis de configuração não devem ser versionadas no Git.
Durante o desenvolvimento foram aplicados conceitos como:
- MVC
- Front Controller
- Roteamento
- Namespaces
- Autoload
- PDO
- Prepared Statements
- Sessões
- Hash de senhas
- Criptografia com chave simétrica - (AES-256-CBC)
- Validação de dados
- Sanitização de saída
- Separação de responsabilidades
- Auditoria
- Controle de acesso
- log do server
A divisão entre App e Core foi utilizada para separar os componentes específicos da aplicação dos recursos fundamentais utilizados pelo sistema.
Dessa forma, uma requisição pode seguir um fluxo semelhante a:
Request
↓
Router
↓
Controller
↓
Model
↓
Database
E, após o processamento:
Database
↓
Model
↓
Controller
↓
View
↓
Response
Essa organização facilita a manutenção e permite alterar uma parte da aplicação sem concentrar todas as alterações em um único arquivo.
Algumas funcionalidades consideradas para atualizações futuras:
- Recuperação de senha por e-mail
- Após desbloquear o cadeado, ser redirecionado para a página onde o cadeado foi acionado
- Anexos nas notas (files)
- Melhoria na UI Mobile
- Melhorias de acessibilidade - front-end mobile
- Refatoração do código
- Adição de Camadas como Services e Repositories
- Sistema de Role/Cargo, onde o ADMIN terá acesso a todas as notas de todos os usuários
- cada usuário terá sua própria chave simétrica individual salva com seu perfil no banco.
- Maior cobertura de validações
- Melhorias no sistema de auditoria (Em Manutenção)
- Adição de uma LLM via API para gerar resumos e INSIGHTS
- Regenerate ID para SESSION a cada vez que fizer login
- validação para senha do cadeado ser obrigatoriamente diferente da senha de lohin









