Как правильно синхронизировать / защитить конфиденциальные данные в моем приложении? - PullRequest
0 голосов
/ 31 января 2019

Справочная информация

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

Я занимаюсь разработкой приложения для электроники (node.js), которое будет аутентифицировать учетные данные пользователя с помощью моего удаленного сервера приложений.На моем сервере есть база данных MySQL, в которой будет храниться обычный набор учетных записей пользователей и данных приложений.Кроме того, электронное приложение будет иметь локальную базу данных sqlite, которую я буду периодически обновлять, чтобы синхронизировать работу с удаленным сервером MySQL.База данных Sqlite предназначена для того, чтобы приложение продолжало функционировать, если электронное приложение будет использоваться в автономном режиме или если удаленный сервер выйдет из строя.Я предполагаю, что приложение сначала будет подключено к сети с резервным резервом в автономном режиме.

Как только пользователь аутентифицируется в электронном приложении, приложение позволит пользователю выполнять свою работу, а когда пользователь завершит работу, его работа будетпередано третьей стороне, разместив эту работу в API сторонней организации.При первом входе пользователя в систему ему будет предложено пройти аутентификацию с помощью стороннего API с использованием OAuth2, а сторонний маркер доступа API будет выдан третьей стороной после успешного завершения этой процедуры аутентификации.Этот токен будет храниться в удаленной базе данных MySQL, а также в локальной базе данных sqlite.

Вот кикер.Это электронное приложение будет работать на нескольких машинах, поэтому необходимо поддерживать синхронизацию всего между этими установками, поскольку один и тот же пользователь может использовать любую из этих машин в определенный день.

Вопросы

Не имея справочной информации, вот мои вопросы:

  1. Если я хэш и солюю пароли пользователей до их сохранения в базе данных: SHA-512 все ещебезопасный хеш, или есть другой алгоритм, который лучше?

  2. Сторонний токен API по сути является паролем пользователя для доступа к стороннему API.Я намерен относиться к нему как к такому же, как и к паролю.Поскольку хеширование является односторонним и, следовательно, не вариант, как я могу лучше всего зашифровать токен API для хранения в базе данных?Моя текущая мысль - использовать AES с длинной случайно сгенерированной строкой, которая хранится в файле конфигурации моего серверного приложения в качестве секретного ключа.В этом случае, если база данных взломана, секретный ключ не будет включен в данные.Чтобы получить секретный ключ, сам сервер должен быть взломан.Это лучший способ сделать это?

  3. При запуске приложения или при запуске вручную локальное электронное приложение запросит мой удаленный сервер, чтобы определить, были ли какие-либо изменения в базе данных с момента последнего обновления локальной базы данных sqlite.Если есть изменения и требуется локальное обновление, удаленный сервер отправит ответ со всеми изменениями (вероятно, в формате JSON) с момента последнего обновления.Соединение между локальным приложением и удаленным сервером будет зашифровано с использованием TLS (https).Достаточно ли этого для защиты обмена данными (который содержит хэши паролей и тому подобное) между локальным приложением и удаленным сервером или объект JSON должен быть дополнительно зашифрован?Это даже хороший способ синхронизации данных?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...