security: remove .env from tracking (contains secrets)

This commit is contained in:
ZOMBIIIIIII
2026-05-11 18:15:21 +03:00
parent 295c3a9d6d
commit 64696b334c
26 changed files with 1840 additions and 128 deletions

View File

@@ -33,7 +33,7 @@ export function errorHandler(err: HttpError, _req: Request, res: Response, _next
return;
}
// Серверные ошибки (5xx) — generic message, детали только в логи
logger.error(`Server error: ${err.message}`);
// Серверные ошибки (5xx) — generic message, детали (со stack) только в логи
logger.error(`Server error: ${err.stack || err.message}`);
res.status(500).json({ success: false, error: 'Internal server error' });
}

View File

@@ -31,7 +31,7 @@ export const mutateLimiter = rateLimit({
message: { success: false, error: 'Too many mutating requests' },
});
// Самый строгий — для send / vault PUT (anti-abuse / spam tx prevention)
// Самый строгий — для send / vault PUT / wallet create (anti-abuse / spam tx prevention)
export const sensitiveLimiter = rateLimit({
windowMs: 60 * 1000,
limit: 10,
@@ -40,3 +40,14 @@ export const sensitiveLimiter = rateLimit({
keyGenerator: keyByUserOrIp,
message: { success: false, error: 'Too many sensitive requests' },
});
// Экстремально строгий — для GET /api/wallets/mnemonic.
// Reveal seed phrase — критическая операция: 5 запросов в час per-user.
export const mnemonicRevealLimiter = rateLimit({
windowMs: 60 * 60 * 1000, // 1 hour
limit: 5,
standardHeaders: 'draft-7',
legacyHeaders: false,
keyGenerator: keyByUserOrIp,
message: { success: false, error: 'Too many mnemonic reveal requests' },
});