Skip to content

Seguridad

Fang JS prioriza la seguridad sin depender de librerías externas pesadas. Utiliza el módulo nativo crypto de Node.js para ofrecer herramientas robustas de hashing, criptografía y autenticación por tokens.


Fang utiliza el algoritmo scrypt, un esquema de derivación de claves diseñado para ser resistente a ataques de fuerza bruta mediante hardware (GPU/ASIC).

Genera un hash seguro. Por defecto usa un salt de 16 bytes.

import { generateHash } from "@fang-js/fang/security";
const hash = await generateHash("mi_password_seguro");
// Resultado: scrypt$7a2...$b4e...

Verifica si una contraseña coincide con un hash almacenado. Utiliza timingSafeEqual para prevenir ataques de tiempo.

import { verifyHash } from "@fang-js/fang/security";
const isValid = await verifyHash("mi_password_seguro", user.storedHash);
if (isValid) {
// Login exitoso
}

Para firmar tokens o cifrar datos, necesitas claves criptográficamente fuertes. Fang incluye createSecretKey para automatizar esto.

Genera una clave en formato hexadecimal.

  1. Algoritmos: hmac o aes.

  2. Validación: Para AES, solo permite 128, 192 o 256 bits. Para HMAC, exige un mínimo de 128 bits.

import { createSecretKey } from "@fang-js/fang";
const secret = await createSecretKey("hmac", 256);
console.log(secret); // "a7f3..."

Fang implementa el estándar JWT de forma nativa (HS256). Esto permite autenticar peticiones de forma stateless.

Crea un token firmado con una fecha de expiración.

import { signJwt } from "@fang-js/fang/security";
import { TokenExpiration } from "@fang-js/fang/types";
const token = signJwt(
{ userId: "123", role: "admin" },
{ secret: "tu_secreto", expiresIn: TokenExpiration.OneHour }, // 1 hora
);

Valida la integridad y la expiración de un token. Si es válido, devuelve el payload decodificado; si no, devuelve null.

import { verifyJwt } from "@fang-js/fang/security";
const payload = verifyJwt(token, "tu_secreto");
if (payload) {
console.log("Usuario ID:", payload.userId);
}

Para facilitar el desarrollo con TypeScript, Fang exporta las siguientes interfaces:

InterfazDescripción
SignOptionsConfiguración para firmar tokens (secret, expiresIn).
JWTPayloadEstructura base para los datos contenidos en el token.

Rendimiento Nativo

Al usar el módulo crypto de Node.js, aprovechamos las optimizaciones de bajo nivel del motor V8.

Seguridad de Tiempo Constante

Usamos timingSafeEqual en todas las comparaciones críticas para evitar ataques de canal lateral.

Sin Vulnerabilidades de Terceros

Menos dependencias significan menos riesgo de ataques a la cadena de suministro (supply chain attacks).