Комментарии 14
Насколько хорошо защищены ваши пароли?
Для облачного менеджера паролей вопрос какой-то… риторический)
Лучше бы на KeePass время потратили — было бы гораздо интереснее.
Тут такое, клиент открыт, в облако оно улетает в заштфрованном виде, есть возможно селфхоста, все не так плохо.
На KeePassXC, он прям уже совсем торт, но народ всё ещё продолжает ныть что "ну его никто не проверял, буду дальше колоться в проприетарщину"
Bitwarden ведь есть в self-hosted варианте. Можно развернуть на домашнем сервере и, опционально, засунуть за VPN для дополнительной защиты.
В таком случае облачность уже не такая облачная)
за VPN не засунуть, там требуется SSL, потому приходится хостить его наружу
Ну вообще-то можно и вариантов реализации масса. Более того, такой кейс повсеместно используется в организациях с удаленным доступом ( как раз, чтобы внутреннее сервисы работали на публичных ЦС и не требовали установки сертов сверху )
Если хочется с реальным доменом и условным letsencrypt: Берем домен 2ур для получения сертов, получаем wilcard серт, рулим все * домены 3ур на сервак, где уже будет рулить поддоменами условный nginx. В нем для поддомена bitwarden закрываете доступ всем подсетям, кроме подсети вашего туннеля. Profit.
Для получения wildcard вам даже и не потребуется придумывать костыли, чтобы LE смог достучаться до вас. Но даже если хотите - никто не мешает рулить именно amce урл снаружи. Опять же, nginx закрывает этот вопрос с головой.
Если хочется совсем закрыться: Берём самоподписанный серт, ставим на клиентскую сторону, шаманим с hosts, травим dns запросы в vpnе в сторону сервера, в остальном тоже самое.
Ну и в целом, можно и хардкорнее.
Не как замечание, но как подсказка будущим поколениям: в Issue 6 можно было бы переписать код с использованием Pattern matching:
Вместо выражения вида
var userId = folders.FirstOrDefault()?.UserId ??
ciphers.FirstOrDefault()?.UserId;
if (userId.HasValue)
{
Consume(userId.Value)
}
Написать
if (folders.FirstOrDefault()?.UserId ??
ciphers.FirstOrDefault()?.UserId
is {} userId)
{
Consume(userId);
};
И больше не иметь дела с nullable int.
Многих ошибок можно было бы избежать, если бы предусловия проверялись бы как можно раньше и как можно проще...
Разбить проверки в Issue 3 на два, в 12 проверить каждое отдельно, в 7 проверить последовательно...
В начале метода в блоке предусловий выходов должно быть столько, сколько нужно, не надо упарываться и пытаться делать только один.
Насколько хорошо защищены ваши пароли? Проверка проекта Bitwarden