smarteq
@smarteq
Web developer, System administrator

Менеджер паролей php + https?

Всем здравствуйте!


Меня в конец достало держать пароли в блокноте.


Хочу сделать хранильник паролей в онлайне. Сразу оговорюсь что SaaS-хранильникам я не доверяю по 2-м причинам:


1) Слишком лакомый кусок для хакера такие сервисы, по сравнению с моим уютным хомяком, о котором 99,99999% даже и подумать не подумают и целенаправлено никто трогать не будет, соответственно шанс что БД с моими пожитками утечет на сторону или в паблик стремится к нулю.


2) Пароли от своих серваков я помню и набираю с закрытыми глазами, поэтому если мой сервер ушел в даун, я по крайней мере могу понять что с этим делать, даже если нахожусь в кафешке и с собой у меня только джейлбрейкнутый айпод тач, в отличие если сайт с таким хранильником уйдет в даун…


Поэтому решил I need it — I write it.

Но у меня есть ряд вопросов на тему «как лучше».


1) Криптование на сервере. Само собой хранить их открытым текстом в БД/файле это бред. Надо их как-то криптовать на сервере, причем желательно чтобы ключ от этого добра был где нибуть в другом месте. У кого какие идеи по криптованию данных на сервере? Задача: если случайно БД с этим добром каким-то образом попадает в чужие руки, чтобы восстановление инфы заняло больше времени чем смена паролей на всех оказавшихся там ресурсах.


2) HTTPS самодостаточен или еще чем-то лучше подстраховаться на пути «транзита»?


3) Фильтрация по браузерам. Есть такая идея чтобы пускало только с определенных браузеров. Вот как в ssh авторизация по ключам работает, аналогично что-то прописать в браузере. Какой-то ключ для конкретно этого браузера. А браузеру без/с другим ключем отдавать похожую, но фейковую страницу. Это реализуемо? Если да, то где почитать по каким темам?


4) Если есть что-то уже подобное на php — буду признателен за ссылки.
  • Вопрос задан
  • 5429 просмотров
Решения вопроса 1
shsweb
@shsweb
Возьмите javascript библиотеку шифрования, например crypto-js, и шифруйте/расшифровывайте прямо в браузере. Соответственно сами данные будут передаваться от вас и к вам уже шифрованными, т.е. даже https особо не нужен и на сервере в базе все лежит шифрованное, так что не страшно если украдут.
Ответ написан
Пригласить эксперта
Ответы на вопрос 7
KorP
@KorP
Кратко о себе
По-моему вы изобретаете велосипед, да ещё и на PHP…
Ответ написан
Ugputu
@Ugputu
php, js, my/mssql, sqlite, html, css, it-consult
Как сказал shsweb, стоит шифровать через js локально. На сервере все хранится в шифрованном виде (собственно оно в таком виде уже туда отправляется).

Возьмите 1password и экспортируйте хранилище в web документ, потом посмотрите на него, Вам должно понравиться как оформлен интерфейс.

По своему опыту скажу, что я бы не стал доверять даже себе в этом вопросе. Слишком много узких мест будет в вашем приложении. Лучше доверить это спецам. И как вариант поставить на тот-же айпод тач 1password или другое сходное решение с возможностью синхронизации.
Ответ написан
cronfy
@cronfy
Еще можно (чтобы опознавать конкретный браузер) использовать клиентский сертификат. И на nginx в зависимости от наличия/отсутствия клиентского сертификата отдавать либо одно, либо другое.
Ответ написан
FilimoniC
@FilimoniC
1) Читайте про ассиметричное шифрование
2) Чем не устраивает Dropbox + KeePass?
Ответ написан
shanker
@shanker
1. Асимметричное шифрование. Публичным ключом шифруете, закрытым ключом расшифровываете. закрытый можно у себя где-то хранить
2. По-хорошему, HTTPS нужно использовать с валидным сертификатом. Тогда маловероятно что кто-то сможет провести атаку «человек посередине» незаметно от вас. Но на сертификат нужно потратиться
3. Подобную идею я уже поднимал в статье. Вкратце: каждому браузеру даёте свои куки и так опознаёте их. Это сработает даже если у них будут одинаковые User-Agent. Кукисы генерите на основании типа браузера. Если вдруг злоумышленник украдёт куки от Хрома и поставит в свой огнелис — вы спалите его.
Ответ написан
C некоторым опозданием, но утилита уже была написана и здесь пробегала ссылка на нее: TeamPass, Passwords Manager dedicated for managing passwords in a collaborative way on any server Apache, MySQL and PHP — www.teampass.net
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
HTML Academy Санкт-Петербург
от 110 000 до 130 000 руб.
CENTRA Новокузнецк
от 50 000 руб.
от 1 500 до 2 500 usd.
19 марта 2019, в 10:33
20000 руб./за проект
19 марта 2019, в 10:19
500 руб./за проект