# SafeVault - Password Manager Sicuro **SafeVault** Γ¨ un password manager personale, moderno e sicuro, sviluppato con PHP 8+, MySQL e un'interfaccia responsive basata su Tailwind CSS. ![SafeVault](https://img.shields.io/badge/PHP-8%2B-blue) ![MySQL](https://img.shields.io/badge/MySQL-5.7%2B-orange) ![License](https://img.shields.io/badge/license-MIT-green) ## πŸ“‹ Caratteristiche - βœ… **Autenticazione sicura** - Sistema di login e registrazione con password hashate (bcrypt) - βœ… **Crittografia AES-256** - Le password salvate sono crittografate con AES-256-CBC - βœ… **Generatore di password** - Genera password sicure e casuali lato client - βœ… **CRUD completo** - Crea, visualizza, modifica ed elimina credenziali - βœ… **Design responsive** - Interfaccia moderna ottimizzata per tutti i dispositivi - βœ… **Protezione SQL Injection** - Uso esclusivo di PDO e prepared statements - βœ… **Self-hosted** - Controllo completo dei tuoi dati sul tuo server ## πŸš€ Installazione ### Requisiti - PHP 8.0 o superiore - MySQL 5.7+ o MariaDB 10.2+ - Apache/Nginx con mod_rewrite abilitato - Estensioni PHP richieste: - `pdo_mysql` - `openssl` - `mbstring` ### Passo 1: Download Clona o scarica questo repository sul tuo server: ```bash git clone https://github.com/tuousername/safevault.git cd safevault ``` ### Passo 2: Configurazione Database 1. Accedi al tuo server MySQL: ```bash mysql -u root -p ``` 2. Importa lo schema del database: ```bash mysql -u root -p < database.sql ``` Oppure importa manualmente il file `database.sql` tramite phpMyAdmin. ### Passo 3: Configurazione Applicazione 1. Apri il file `includes/config.php` 2. Modifica le credenziali del database: ```php define('DB_HOST', 'localhost'); // Host del database define('DB_NAME', 'safevault_db'); // Nome del database define('DB_USER', 'root'); // Username MySQL define('DB_PASS', 'tuapassword'); // Password MySQL ``` 3. **IMPORTANTE**: Cambia la chiave di crittografia con una stringa casuale di 32 caratteri: ```php define('ENCRYPTION_KEY', 'la-tua-chiave-segreta-di-32-caratteri!'); ``` Puoi generare una chiave sicura con: ```bash php -r "echo bin2hex(random_bytes(16));" ``` 4. Se usi HTTPS, imposta: ```php ini_set('session.cookie_secure', 1); ``` ### Passo 4: Configurazione Web Server #### Apache Se usi Apache, crea un file `.htaccess` nella cartella `public/`: ```apache RewriteEngine On RewriteBase / # Proteggi i file sensibili Order allow,deny Deny from all ``` #### Nginx Se usi Nginx, aggiungi questa configurazione: ```nginx location ~ ^/includes/ { deny all; return 404; } location ~ ^/public/ { try_files $uri $uri/ /public/index.php?$query_string; } ``` ### Passo 5: Verifica Permessi Assicurati che i file abbiano i permessi corretti: ```bash chmod 755 public/ chmod 644 public/*.php chmod 600 includes/config.php ``` ### Passo 6: Accesso Visita il tuo sito (es. `http://tuosito.com/public/`) e registra il tuo primo account! ## πŸ“ Struttura del Progetto ``` safevault/ β”œβ”€β”€ public/ # File pubblicamente accessibili β”‚ β”œβ”€β”€ index.php # Homepage (reindirizza a login/dashboard) β”‚ β”œβ”€β”€ login.php # Pagina di login β”‚ β”œβ”€β”€ register.php # Pagina di registrazione β”‚ β”œβ”€β”€ dashboard.php # Dashboard principale β”‚ β”œβ”€β”€ logout.php # Logout β”‚ └── about.php # Informazioni sul progetto β”œβ”€β”€ includes/ # File di backend (protetti) β”‚ └── config.php # Configurazione e funzioni β”œβ”€β”€ assets/ # Risorse statiche β”‚ β”œβ”€β”€ css/ β”‚ β”‚ └── style.css # Stili personalizzati β”‚ └── js/ β”‚ β”œβ”€β”€ auth.js # JavaScript per autenticazione β”‚ └── dashboard.js # JavaScript per dashboard β”œβ”€β”€ database.sql # Schema del database └── README.md # Questo file ``` ## πŸ”’ Sicurezza SafeVault implementa le migliori pratiche di sicurezza: ### Password Utente - Hashate con **bcrypt** (algoritmo `PASSWORD_BCRYPT`) - Cost factor di 12 per maggiore sicurezza - Non memorizzate in chiaro ### Password Salvate (Credenziali) - Crittografate con **AES-256-CBC** - Ogni password usa un IV (Initialization Vector) unico - Decrittografate solo quando necessario ### Database - **PDO** con prepared statements - Protezione contro SQL Injection - Validazione e sanitizzazione input ### Sessioni - Cookie HttpOnly (previene XSS) - Sessioni server-side sicure - Logout completo con distruzione sessione ### HTTPS Per la massima sicurezza in produzione: 1. Installa un certificato SSL (Let's Encrypt gratuito) 2. Forza HTTPS nel file `.htaccess`: ```apache RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] ``` ## 🎨 FunzionalitΓ  ### Dashboard - Visualizza tutte le credenziali salvate - Statistiche in tempo reale - Ricerca e filtro credenziali - Copia password negli appunti - Toggle visibilitΓ  password ### Gestione Credenziali - **Aggiungi**: Crea nuove credenziali con servizio, username, password, URL e note - **Modifica**: Aggiorna credenziali esistenti - **Elimina**: Rimuovi credenziali con conferma - **Generatore**: Crea password sicure (16 caratteri con lettere, numeri e simboli) ### Generatore Password Il generatore crea password con: - Lunghezza di 16 caratteri - Lettere maiuscole (A-Z) - Lettere minuscole (a-z) - Numeri (0-9) - Caratteri speciali (!@#$%^&*) ## πŸ› οΈ Personalizzazione ### Cambiare i colori Modifica `assets/css/style.css` o usa le classi Tailwind nelle pagine PHP. ### Aggiungere campi alle credenziali 1. Modifica la tabella `credentials` in `database.sql` 2. Aggiungi i campi nel form in `dashboard.php` 3. Aggiorna le query SQL per includere i nuovi campi ### Cambiare il logo Sostituisci l'icona SVG nelle pagine con il tuo logo personalizzato. ## πŸ“Š Database Schema ### Tabella `users` ```sql - id (INT, AUTO_INCREMENT, PRIMARY KEY) - username (VARCHAR 50, UNIQUE) - email (VARCHAR 100, UNIQUE) - password (VARCHAR 255) -- Hash bcrypt - created_at (TIMESTAMP) - last_login (TIMESTAMP) ``` ### Tabella `credentials` ```sql - id (INT, AUTO_INCREMENT, PRIMARY KEY) - user_id (INT, FOREIGN KEY -> users.id) - service_name (VARCHAR 100) - username (VARCHAR 100) - password (TEXT) -- Crittografato AES-256 - url (VARCHAR 255, NULLABLE) - notes (TEXT, NULLABLE, Crittografato) - created_at (TIMESTAMP) - updated_at (TIMESTAMP) ``` ## πŸ› Risoluzione Problemi ### Errore di connessione al database - Verifica le credenziali in `includes/config.php` - Assicurati che MySQL sia in esecuzione - Controlla che il database `safevault_db` esista ### Password decrittografate incorrettamente - Verifica che `ENCRYPTION_KEY` non sia stata cambiata dopo aver salvato le credenziali - Se cambi la chiave, le password esistenti non potranno essere decrittografate ### Pagina bianca / Errore 500 - Attiva la visualizzazione errori PHP: ```php ini_set('display_errors', 1); error_reporting(E_ALL); ``` - Controlla i log del server (`/var/log/apache2/error.log`) ### Session non funzionanti - Verifica che la cartella session di PHP sia scrivibile - Controlla `php.ini` per `session.save_path` ## πŸ“„ Licenza Questo progetto Γ¨ rilasciato sotto licenza MIT. Sei libero di usarlo, modificarlo e distribuirlo. ## πŸ‘€ Autore Creato con ❀️ per utenti attenti alla sicurezza. ## 🀝 Contributi I contributi sono benvenuti! Sentiti libero di: - Segnalare bug - Proporre nuove funzionalitΓ  - Inviare pull request ## πŸ“ž Supporto Per domande o supporto: - Apri un issue su GitHub - Consulta la pagina [About](public/about.php) dell'applicazione ## ⚠️ Disclaimer Questo software Γ¨ fornito "cosΓ¬ com'Γ¨", senza garanzie di alcun tipo. Usalo a tuo rischio e pericolo. L'autore non Γ¨ responsabile per perdite di dati o problemi di sicurezza. ## πŸ” Best Practices 1. **Backup regolari**: Fai sempre backup del database 2. **Usa HTTPS**: Mai usare HTTP in produzione 3. **Aggiorna**: Mantieni PHP e MySQL aggiornati 4. **Password forte**: Usa una password forte per l'account admin 5. **Chiave unica**: Non usare mai la chiave di esempio in produzione --- **SafeVault** - Il tuo password manager personale e sicuro.