← На главную

LegacyAuth удалили из-за SQL-инъекций, теперь validateToken

06.06.2026 20:03 · hackernews

В свежем коммите переписали ядро аутентификации — патч затронул src/auth/login.ts.

Добавлена новая экспортируемая функция validateToken. Она принимает строку token, декодирует её через jwt.verify с секретным ключом SECRET, а затем проверяет поле exp. Если срок действия истёк или поле отсутствует — выбрасывается TokenExpiredError. Это заменяет разрозненные проверки, которые раньше были размазаны по коду.

Функция authenticateUser получила два важных изменения. Во-первых, если пользователь не найден в базе, теперь кидается UserNotFoundError, а не возвращается null. Это сделает обработку ошибок единообразной — вызывающий код больше не будет гадать, пришёл ли null из-за неверного email или по другой причине. Во-вторых, перед запросом к базе добавили вызов rateLimiter.check(email). Ограничение частоты запросов будет срабатывать на уровне одного email, что защитит от брутфорса.

Наконец, удалена устаревшая функция legacyAuth. Она принимала логин и пароль в открытом виде и напрямую подставляла их в SQL-запрос через конкатенацию строк: db.query('SELECT * FROM users WHERE email = ? AND password = ?', [user, pass]). Такая конструкция оставляла классическую дыру для SQL-инъекций — злоумышленник мог передать специально сформированный user или pass и выполнить произвольный запрос. Теперь этой дыры не существует. Весь старый код, который вызывал legacyAuth, должен был быть переписан на authenticateUser ранее — в этом коммите просто добили опасную функцию.

Читать оригинал →