- PHP 8.0+
- MySQL 5.7+
- Apache/Nginx
- Extensiones PHP: PDO, PDO_MySQL, OpenSSL
# Crear la base de datos e importar el schema
mysql -u root -p
CREATE DATABASE secure_app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
exit;
mysql -u root -p secure_app_db < database/schema.sqlEditar config.php:
'database' => [
'host' => 'localhost',
'dbname' => 'secure_app_db',
'username' => 'tu_usuario', // ⚠️ CAMBIAR
'password' => 'tu_contraseña', // ⚠️ CAMBIAR
],chmod -R 755 public/
chmod -R 755 src/
chown -R www-data:www-data .El archivo .htaccess ya está configurado en public/.htaccess
Verificar que mod_rewrite esté habilitado:
sudo a2enmod rewrite
sudo service apache2 restartAgregar a la configuración del servidor:
server {
listen 80;
server_name localhost;
root /ruta/a/pagina/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\. {
deny all;
}
}Abrir en el navegador:
http://localhost/
- Email:
admin@example.com - Contraseña:
Admin123!
- Email:
user@example.com - Contraseña:
Password123!
USE secure_app_db;
SHOW TABLES;
SELECT COUNT(*) FROM users;Deberías ver 5 tablas y 3 usuarios.
curl http://localhost/api.php?path=healthRespuesta esperada:
{"status":"ok","timestamp":"2024-...","version":"1.0.0"}- Ir a
http://localhost/login.php - Iniciar sesión con las credenciales de administrador
- Deberías ser redirigido al dashboard
- Verificar credenciales en config.php
- Verificar que MySQL esté corriendo
- Verificar que la base de datos exista
- Verificar que autoload.php esté en la raíz
- Verificar permisos de lectura en
/src
- Verificar configuración de Apache/Nginx
- Verificar que
mod_rewriteesté habilitado (Apache) - Verificar que el DocumentRoot apunte a
/public
- Verificar permisos en
/tmpo directorio de sesiones - Verificar configuración de PHP session.save_path
En config.php:
'env' => 'production',
'debug' => false,En public/.htaccess, descomentar:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]En autoload.php, cambiar:
ini_set('session.cookie_secure', 1);- Generar hash de nueva contraseña:
<?php
echo password_hash('NuevaContraseña123!', PASSWORD_ARGON2ID, [
'memory_cost' => 65536,
'time_cost' => 4,
'threads' => 3
]);- Actualizar en la base de datos:
UPDATE users SET password = 'HASH_GENERADO' WHERE email = 'admin@example.com';# Crear script de backup
#!/bin/bash
mysqldump -u usuario -p secure_app_db > backup_$(date +%Y%m%d).sql
gzip backup_$(date +%Y%m%d).sql
# Agregar a crontab (diario a las 2 AM)
0 2 * * * /ruta/al/script/backup.shLeer README.md para documentación completa y SECURITY.md para mejores prácticas de seguridad.