# Checklist de seguridad

Esta entrega es estatica y evita los riesgos mas comunes de una web comercial sin backend. Aun asi, antes de usarla con clientes reales, revisa lo siguiente.

## Incluido

- CSP base en `index.html` para limitar scripts, estilos, imagenes y formularios.
- `frame-ancestors 'none'` para reducir clickjacking.
- `referrer` configurado como `strict-origin-when-cross-origin`.
- Sin librerias externas de JavaScript.
- Sin claves privadas, tokens de pasarela ni secretos en frontend.
- Formularios con campos requeridos, limites de longitud, saneamiento basico y honeypot.
- Salidas dinamicas escapadas con `escapeHTML`.
- Enlaces externos con `rel="noopener noreferrer"`.
- Carritos y leads guardados solo en `localStorage` para demo.
- Registro/login demo con contrasena hasheada con salt cuando el navegador permite Web Crypto.

## Antes de produccion

1. Conecta formularios a un endpoint HTTPS propio o serverless.
2. Valida todos los datos otra vez en servidor.
3. Migra registro/login a backend con sesiones seguras, expiracion, recuperacion de contrasena y proteccion contra fuerza bruta.
4. Agrega rate limiting, CAPTCHA o proteccion anti-spam si recibes trafico pagado.
5. No aceptes precios, stock, descuentos ni totales calculados solo por frontend.
6. Procesa pagos con proveedor certificado: Culqi, Mercado Pago, Niubiz, Stripe u otro.
7. Guarda leads en CRM o base de datos con control de acceso.
8. Agrega terminos, politicas de privacidad y consentimiento legal real.
9. Ajusta la CSP si agregas analytics, mapas, chat, CRM o pasarela.
10. Configura HTTPS, HSTS y cabeceras de seguridad desde el hosting.
11. Revisa backups, permisos de usuarios y rotacion de credenciales.

## Cabeceras recomendadas en hosting

```text
Content-Security-Policy: default-src 'self'; img-src 'self' https://images.unsplash.com data:; script-src 'self'; style-src 'self'; connect-src 'self'; form-action 'self'; base-uri 'self'; frame-ancestors 'none'; upgrade-insecure-requests
Referrer-Policy: strict-origin-when-cross-origin
X-Content-Type-Options: nosniff
Permissions-Policy: camera=(), microphone=(), geolocation=()
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
```

## Integracion segura de leads

El frontend puede enviar este tipo de payload a tu backend:

```json
{
  "sectorId": "clinica",
  "name": "Cliente",
  "phone": "+51999999999",
  "email": "cliente@example.com",
  "items": [],
  "totals": {}
}
```

El servidor debe validar, registrar, filtrar spam, enviar al CRM y devolver una respuesta simple. Si usas un dominio externo para el endpoint, agrega ese dominio a `connect-src` en la CSP.

## Pruebas manuales sugeridas

- Probar formularios vacios, telefonos invalidos y emails invalidos.
- Probar busqueda y filtros en cada rubro.
- Probar sumar, restar y limpiar carritos.
- Probar cupones `VENTA10` y `RAPIDO15`.
- Probar el modal de cotizacion.
- Probar en movil, tablet y escritorio.
- Revisar consola del navegador antes de publicar.
