# Contact Form — PHP endpoint Este endpoint vive en `server1` y procesa los envíos del formulario de `/contacto`. ## ⚠️ NO se deploya con Astro. Es solo template. ## Setup en server1 (Netcup, cPanel) ### 1. Crear cuenta de correo dedicada En cPanel → Email Accounts, crear: - **Email**: `no-reply@hostingdelsur.net` (Mauri confirma que ya existe) - **Password**: contraseña fuerte (mínimo 16 caracteres, símbolos, números) - **Quota**: 1 GB (solo se usa para SMTP, no recibe correo) ### 2. Crear archivo de credenciales El archivo se crea en `/home/hostingdelsur/.smtp-credentials.json` (NO en `public_html/`, por seguridad). Contenido (reemplazar PEGAR_AQUI con la password real): ```json { "host": "localhost", "port": 465, "username": "no-reply@hostingdelsur.net", "password": "PEGAR_AQUI", "encryption": "ssl", "from": "no-reply@hostingdelsur.net", "fromName": "Hosting del Sur - Web", "to": "contacto@hostingdelsur.net" } ``` Por SSH: ```bash chmod 600 /home/hostingdelsur/.smtp-credentials.json chown hostingdelsur:hostingdelsur /home/hostingdelsur/.smtp-credentials.json ``` ### 3. Subir PHPMailer (ya subido en este deploy) ```bash # Ya ejecutado durante el deploy: mkdir -p /home/hostingd/private/PHPMailer # 3 archivos copiados: Exception.php, PHPMailer.php, SMTP.php chmod 640 /home/hostingd/private/PHPMailer/*.php chown -R hostingdelsur:hostingdelsur /home/hostingd/private ``` ### 4. Subir el endpoint (ya subido) ``` /home/hostingd/public_html/api/contact.php /home/hostingd/public_html/api/.htaccess ``` El `.htaccess` deniega todo excepto POST al endpoint. Ya configurado. ### 5. Variables de entorno opcionales (reCAPTCHA secret) Para activar validación reCAPTCHA v3 server-side, agregar en el `.htaccess` o php.ini del server: ```bash # SetEnv RECAPTCHA_SECRET "6LeOxaEaAAAAAM5OODBE2p9bknosuxpW7Gg17fKG" ``` O en cPanel → MultiPHP INI Editor: ```ini env[RECAPTCHA_SECRET] = "6LeOxaEaAAAAAM5OODBE2p9bknosuxpW7Gg17fKG" ``` ### 6. Test ```bash curl -X POST https://hostingdelsur.net/api/contact.php \ -d "name=Test&[email protected]&message=Hola&lang=es" ``` Debe devolver `{"ok":true}`. Sin reCAPTCHA token primero, con token después. ## Seguridad implementada - ✅ Credenciales fuera de `public_html/` (en `~/`) - ✅ Permisos `chmod 600` (solo el usuario puede leer) - ✅ Honeypot (`website` field) anti-bot - ✅ Validación y sanitización de inputs - ✅ `Reply-To` con email del visitante para responder - ✅ `From` con la cuenta dedicada (no spoofing) - ✅ TLS obligatorio (puerto 465 + `ssl`) - ✅ Rate limit básico por IP (3 envíos/hora) vía `apcu_fetch/store` - ✅ Headers anti-cache y anti-sniff - ✅ Mensaje de error genérico (no expone detalles internos) - ✅ reCAPTCHA v3 invisible (con score ≥ 0.3) si se configura `RECAPTCHA_SECRET` ## Pendiente - [ ] Mauri debe re-enviar la password de `no-reply@` (Mauri la puso en chat originalmente; el deploy la borró del servidor) - [ ] Mauri debe crear el archivo `~/.smtp-credentials.json` con la password real - [ ] (Opcional) Configurar `RECAPTCHA_SECRET` en el environment del server