Protección de Next.js Server ActionsPRO

Proteja los endpoints públicos de Server Actions contra la manipulación de parámetros y ataques de repetición con payloads firmados criptográficamente.

Cryptographic Execution Pipeline

A
Protected Payload (Injected metadata)
{}
B
HMAC-SHA256 Signature (Hex)
/**
 * client-signer.ts
 * Browser-safe cryptographic payload signer for Next.js Server Actions.
 * Keep this module locally integrated in your client components.
 */

export async function signActionPayload(payload: any, hexSecretKey: string) {
  const ts = Math.floor(Date.now() / 1000);
  const nonce = Array.from(window.crypto.getRandomValues(new Uint8Array(16)))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
    
  const protectedPayload = {
    ...payload,
    _shield: { ts, nonce }
  };
  
  const serialized = JSON.stringify(protectedPayload);
  
  // Convert hex signing key to bytes
  const keyBytes = new Uint8Array(
    hexSecretKey.match(/.{1,2}/g)!.map(byte => parseInt(byte, 16))
  );
  
  // Import the raw secret into SubtleCrypto
  const cryptoKey = await window.crypto.subtle.importKey(
    "raw",
    keyBytes,
    { name: "HMAC", hash: { name: "SHA-256" } },
    false,
    ["sign"]
  );
  
  // Calculate signature
  const signatureBuffer = await window.crypto.subtle.sign(
    "HMAC",
    cryptoKey,
    new TextEncoder().encode(serialized)
  );
  
  const signature = Array.from(new Uint8Array(signatureBuffer))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
    
  return {
    payload: protectedPayload,
    signature
  };
}

Instrucciones

  1. 1

    Proporcione la carga útil JSON de su acción en el editor de entrada.

  2. 2

    Genere o ingrese una clave de firma segura de 32 bytes.

  3. 3

    Configure la ventana de tiempo de expiración (TTL) para limitar la frescura de la carga útil.

  4. 4

    Copie las firmas generadas o descargue los bloques de código preconstruidos del firmador del cliente y verificador del servidor.

Preguntas Frecuentes

Las Next.js Server Actions son endpoints públicos HTTP POST que los clientes maliciosos pueden inspeccionar y repetir. Al firmar criptográficamente la carga útil en el cliente con una firma HMAC-SHA256 que contiene una marca de tiempo y un nonce único, el servidor puede verificar la integridad de la carga útil, verificar si la marca de tiempo está dentro de la ventana TTL válida y asegurarse de que el nonce no se haya reutilizado, bloqueando por completo los ataques de repetición y la manipulación de parámetros.
No. Todos los cálculos criptográficos, la generación de claves y la firma de cargas útiles se ejecutan completamente en el lado del cliente utilizando la API SubtleCrypto nativa de su navegador. Sus claves y datos nunca salen de su máquina.