В течение прошедшего месяца я построил первую версию Понятия -A веб-сайт, который позволяет пользователям поделиться информацией о зарплате и представить информацию, переданную другим.
Конечно, я хотел сохранить информацию о своих пользователях частных и анонимных. Когда кто-то смотрит на запись заработной платы, они не должны уметь сказать, кто принадлежит эта запись.
С другой стороны, чтобы обеспечить качество общих данных высоко, пользователи должны быть в состоянии обновить свои записи заработной платы, когда они меняются со временем. Таким образом, записи заработной платы должны быть как-то подключены к соответствующим учетным записям пользователей.
Это представляет проблему: если я реализую его наиболее очевидным способом (база данных внешнего отношения ключей), то оператор веб-сайта (ME), эффективно, имеет доступ к этой связи между учетной записью пользователя и заработной платой. Кроме того, юридические власти, приходящие с постановлением суда, также смогут увидеть это, а в неудачном случае успешной кибер-атаки хакеры получат свои руки на эти данные.
Это не достаточно хорошо! Как мы можем сделать лучше?
Мы ищем решение, где:
- Вход заработной платы читается всеми пользователями системы,
- Соединение между входом заработной платы и учетной записи пользователя читается Только По пользовательской учетной записи владением этой записью,
- Учетные записи пользователей читаются к системе (хотя бы частично) для целей системы входа в систему.
В моем сценарии, поскольку проверка регистрации пользователя является ручным процессом, мне нужна система, чтобы иметь возможность написать это соединение без присутствия пользователя.
Если мы суммируем его: только пользователь должен иметь возможность прочитать запись соединения, и система должна иметь возможность написать эту запись (но не читать ее).
Асимметричное шифрование
Это звучит мне, как асимметричное шифрование, где система знает открытый ключ пользователя, и пользователь знает свой собственный ключ. Система использует открытый ключ для шифрования информации, когда она должна писать ее, и пользователь может прочитать эту информацию, используя свой закрытый ключ.
Конечно, следующая проблема является UX. Мы не можем иметь пользователей использовать закрытые ключи каждый раз, когда они хотят войти в систему.
Это было бы слишком неумело.
Переноса — зашифрованный закрытый ключ
Тогда это поразило меня: что, если я сделаю то же самое, что ключи SSH делают, когда вы устанавливаете их с паролем?
Теперь система хранит оба типа клавиш:
- Открытый ключ и
- Частный ключ, зашифрованный с помощью пароля пользователя.
Теперь, даже если я собирался бросить в необработанный SQL в моей консоли базы данных, я бы не смог сказать, кто владеет, какая заработная плата больше! И пользователь все еще может видеть и управлять собственной записью.
В качестве бонуса я нашел этот метод крепления данных пользователя довольно удобно, и я также использовал его для другой информации, где я уверен, что только пользователю нуждается в доступе к этим данным.
Конечно, нам все еще нужно убедиться, что пользователи создают надежные пароли, которые не уязвимы к атакам словаря, и не были частью любого нарушения. Я использовал ZXCVN Dropbox Библиотека и » Я был Pwed «API для этого.
Спасибо за чтение!
Я рад, что ты дошел до конца этого поста! Если вы заинтересованы в более забавных постов, таких как это, вы должны подписаться на нашу рассылку.
Следующим постом, которое находится в составе, является более глубоким погружением в детали реализации и задачи решения из этой статьи. Не пропустите это, Возьмите нашу рассылку здесь ! 🚀
Спасибо за поддержку!
Оригинал: «https://dev.to/foundsiders/how-have-i-ensured-the-privacy-and-anonymity-of-my-website-users-5fgb»