замки, учёт и чтение на пароме

10 сентября 2026 г. devloggosecurity

замки, учёт и чтение на пароме

Сегодня вместе вышли три небольшие вещи, из той тихой породы, что делает сайт крепче, а не наряднее.

Замок, который выбираешь сам. Аккаунты теперь могут включить вход в два шага: код из приложения-аутентификатора поверх пароля. Хочу ясно сказать о философии, потому что для меня это важно: здесь никто и никогда не будет вам об этом напоминать. Ни баннеров, ни «защитите аккаунт сегодня!», ни принудительного включения. Если вы ни разу не откроете вкладку безопасности, вы и не узнаете, что такая функция есть. Себе, на админский аккаунт, я её включил: этот аккаунт может всё, и так спокойнее. А для вас это целиком ваш выбор.

включение двухфакторного входа в настройках безопасности

Шаг подключения: секрет для приложения-аутентификатора, затем один код, чтобы доказать, что всё работает.

Генерацию кодов я написал сам, не подтягивая библиотеку, потому что под пугающим именем TOTP прячется маленький красивый трюк из старого RFC: посчитай HMAC и дай последним четырём битам дайджеста выбрать, откуда читать код. Вся сердцевина:

mac := hmac.New(sha1.New, secret)
mac.Write(counterBytes[:])
sum := mac.Sum(nil)

// Dynamic truncation (RFC 4226 section 5.3).
offset := sum[len(sum)-1] & 0x0f
code := (uint32(sum[offset]&0x7f) << 24) |
	(uint32(sum[offset+1]) << 16) |
	(uint32(sum[offset+2]) << 8) |
	uint32(sum[offset+3])

Есть и коды восстановления, и пара запасных выходов, чтобы потерянный телефон никогда не означал потерянный блог. Жёстче всего я проверял некрасивые сценарии: один и тот же код дважды отклоняется, сожжённый код восстановления остаётся сожжённым, а аккаунт, который ничего не включал, входит ровно как раньше, байт в байт.

Учёт для языков. Пять языков и почти пятьдесят записей: вопрос «какого перевода мне не хватает» превращался в упражнение на память. Страница языков в админке теперь рисует всю сетку и для записей: недостающие и устаревшие клетки помечены, и от любой дыры один клик до нужного редактора.

И чтение без сети. Сайт теперь можно установить, а открытые записи остаются читаемыми без связи, что в наших краях чаще всего значит: на пароме. Сложная часть была невидимой: закешированные страницы искали свои ресурсы относительно не того адреса и тихо ломались, из тех ошибок, что проявляются, только если по-настоящему выключить сеть и посмотреть. Я так и сделал, и теперь всё работает.

0 комментариев

Войдите , чтобы оставить комментарий.

Войти

Забыли пароль?

Нет аккаунта?