Seguridad
Prácticas de seguridad esenciales para desarrolladores de plugins — verificación de webhooks, gestión de secretos, minimización de scopes, validación de entrada y manejo de tokens.
Los errores de seguridad en plugins afectan a comerciantes reales y sus clientes. Sigue estas prácticas antes de enviar tu plugin a revisión.
1. Siempre verifica las firmas de webhook
Nunca proceses un webhook entrante sin verificar primero su firma HMAC. Un webhook no verificado puede ser reproducido o falsificado.
import { verifyWebhook } from "@whatalo/plugin-sdk/webhooks";
export async function POST(request: Request) {
const payload = await request.text();
const signature = request.headers.get("x-whatalo-hmac-sha256") ?? "";
const isValid = verifyWebhook({ payload, signature, secret: process.env.WHATALO_CLIENT_SECRET! });
if (!isValid) {
return new Response("Invalid signature", { status: 401 });
}
// Safe to process payload here
}Usa el verificador mejorado del template para protección contra repetición — rechaza solicitudes con una marca de tiempo fuera de una ventana de 300 segundos.
2. Protege tu client secret
Tu client secret autentica tu plugin ante la plataforma. Exponerlo es equivalente a entregar la identidad de tu plugin.
- Nunca guardes secretos en control de versiones
- Siempre usa variables de entorno:
process.env.WHATALO_CLIENT_SECRET - El template generado añade
.envy.whatalo/al.gitignoreautomáticamente - Ejecuta
whatalo validateregularmente — escanea tu proyecto en busca de secretos hardcodeados
3. Solicita los scopes mínimos necesarios
Solo declara los scopes de permisos que tu plugin realmente necesita en whatalo.app.ts. Solicitar permisos amplios cuando solo se necesita acceso limitado:
- Aumenta la superficie de riesgo si tu plugin es comprometido
- Es señalado durante el proceso de revisión
4. Valida toda la entrada
- Valida la estructura de los payloads de webhook antes de procesarlos
- Sanitiza cualquier dato externo antes de renderizarlo en tu UI
- No confíes en
context.storeIdpara autorización del lado del servidor — siempre verifica el acceso mediante la API
5. Asegura tu endpoint de webhook
- Usa HTTPS en producción — nunca HTTP
- Implementa protección contra repetición (verifica marcas de tiempo de las solicitudes)
- Retorna códigos de estado HTTP apropiados:
200para éxito,4xxpara errores del cliente,500para fallos inesperados
6. Maneja la expiración de tokens
El CLI maneja la renovación de tokens automáticamente durante el desarrollo. Para llamadas a la API del lado del servidor en producción:
- Maneja
AuthenticationError(HTTP 401) de forma elegante - Implementa lógica de reintento para fallos transitorios antes de mostrar un error al comerciante
7. No almacenes datos innecesarios del comerciante
- Obtén los datos del comerciante desde la API cuando sea necesario en lugar de almacenarlos en caché a largo plazo
- Si debes persistir datos, encríptalo en reposo
- Escucha el webhook
app.uninstalledy elimina todos los datos del comerciante cuando un plugin sea removido