Files
hostingdelsur.net/src/forms/README.md
T
Mauri 393f6b0dc3 feat: sitio hostingdelsur.net v2 con Astro 5, Tailwind v4, soporte light/dark, i18n es/en, Keystatic CMS, reCAPTCHA v3
- Arista Pro Alternate Regular self-hosted (font corporativa)
- Toggle theme con CSS variables y @custom-variant dark
- 6 servicios en 3 categorías (Hosting & Correo / Diseño & Contenido / Infraestructura)
- 3 planes destacados (Básico USD 59, Institucional USD 129, E-commerce USD 219)
- Datacenters en 4 países (Canadá, USA, Alemania, Uruguay) sin ciudades en el sitio
- Sede operativa en Maldonado, Uruguay
- i18n es/en con contenido duplicado en Keystatic
- Endpoint PHP para form de contacto con PHPMailer + reCAPTCHA v3 + honeypot + rate limit
- WorldMap con animación SVG de los 4 países
- 29 páginas generadas, 0 JS por default
- Sitemap auto + robots.txt
- JSON-LD Organization + ProfessionalService con areaServed
2026-06-08 22:32:23 -03:00

3.1 KiB

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):

{
  "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:

chmod 600 /home/hostingdelsur/.smtp-credentials.json
chown hostingdelsur:hostingdelsur /home/hostingdelsur/.smtp-credentials.json

3. Subir PHPMailer (ya subido en este deploy)

# 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:

# SetEnv RECAPTCHA_SECRET "6LeOxaEaAAAAAM5OODBE2p9bknosuxpW7Gg17fKG"

O en cPanel → MultiPHP INI Editor:

env[RECAPTCHA_SECRET] = "6LeOxaEaAAAAAM5OODBE2p9bknosuxpW7Gg17fKG"

6. Test

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