Bouclier Next.js Server ActionsPRO

Protégez les points de terminaison publics de Server Actions contre l'altération des paramètres et les attaques par rejeu grâce à des payloads signés cryptographiquement.

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
  };
}

Instructions

  1. 1

    Fournissez le payload JSON brut de votre action dans l'éditeur d'entrée.

  2. 2

    Générez ou saisissez une clé de signature sécurisée de 32 octets.

  3. 3

    Configurez la fenêtre d'expiration TTL pour limiter la validité du payload.

  4. 4

    Copiez les signatures générées ou téléchargez les blocs de code préconçus pour le client et le serveur.

Questions Fréquemment Posées

Les Server Actions de Next.js sont des points de terminaison HTTP POST publics qui peuvent être inspectés et rejoués par des clients malveillants. En signant cryptographiquement le payload côté client avec une signature HMAC-SHA256 contenant un horodatage et un nonce unique, le serveur peut vérifier l'intégrité du payload, s'assurer que l'horodatage se situe dans la fenêtre TTL autorisée et que le nonce n'a pas été réutilisé, bloquant ainsi complètement les attaques par rejeu et l'altération de paramètres.
Non. Tous les calculs cryptographiques, la génération de clés et la signature des payloads sont exécutés entièrement côté client en utilisant l'API SubtleCrypto native de votre navigateur. Vos clés et vos données ne quittent jamais votre machine.