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
Proporcione la carga útil JSON de su acción en el editor de entrada.
- 2
Genere o ingrese una clave de firma segura de 32 bytes.
- 3
Configure la ventana de tiempo de expiración (TTL) para limitar la frescura de la carga útil.
- 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.