Как защитить данные пользователей веб-приложения?
От: Yodo  
Дата: 23.06.21 08:18
Оценка:
Самый простой пример. Требуется хранить в базе данных номера кредитных карт. В случае утечки этой базы будет полный П.

Ок. Храним данные карт в зашифрованном виде. Ключом шифрования например будет пароль пользователя или его производная.
Пароль хранится в базе в виде хэша, поэтому просто так вытащить его из базы и расшифровать данные карт не получится.

Какие best practice по хранению зашифрованной информации на сервере и расшифровке на клиенте (браузере)?

При этом, в памяти сервера будут в любом случае появляться данные в расшифрованном виде. Т.е. сняв дамп памяти, можно откопать там данные. Но для этого нужен рутовый доступ к серверу.
Re: Как защитить данные пользователей веб-приложения?
От: BlackEric http://black-eric.lj.ru
Дата: 23.06.21 08:27
Оценка:
Здравствуйте, Yodo, Вы писали:

Y>Самый простой пример. Требуется хранить в базе данных номера кредитных карт. В случае утечки этой базы будет полный П.


Y>Ок. Храним данные карт в зашифрованном виде. Ключом шифрования например будет пароль пользователя или его производная.

Y>Пароль хранится в базе в виде хэша, поэтому просто так вытащить его из базы и расшифровать данные карт не получится.

Y>Какие best practice по хранению зашифрованной информации на сервере и расшифровке на клиенте (браузере)?


Y>При этом, в памяти сервера будут в любом случае появляться данные в расшифрованном виде. Т.е. сняв дамп памяти, можно откопать там данные. Но для этого нужен рутовый доступ к серверу.


А не нужно хранить у себя номера кредитных карт. Вам процессинговый центр, через который вы обрабатываете платежи должен предоставить информацию по работе. И требования по передаче информации к ним.
https://github.com/BlackEric001
Re[2]: Как защитить данные пользователей веб-приложения?
От: Yodo  
Дата: 23.06.21 10:13
Оценка:
BE>А не нужно хранить у себя номера кредитных карт. Вам процессинговый центр, через который вы обрабатываете платежи должен предоставить информацию по работе. И требования по передаче информации к ним.

А по существу есть что сказать?

Есть много других данных кроме кредитных карт. Например, можно хранить ключи/доступы к соц. сетям для постинга через API.
Доступ к API банка для извлечения данных, и т.д.

Самый простой пример — email клиент онлайн, который обязан хранить пароли к вашим ящикам чтобы на них авторизовываться и вытягивать почту.
Re[3]: Как защитить данные пользователей веб-приложения?
От: BlackEric http://black-eric.lj.ru
Дата: 23.06.21 10:35
Оценка:
Здравствуйте, Yodo, Вы писали:

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


Он не хранит пароли. Он хранит access и refresh-токены.
Почитайте про организацию авторизации, скажем на примере identity server: Welcome to IdentityServer4 (latest)
https://github.com/BlackEric001
Re: Как защитить данные пользователей веб-приложения?
От: kov_serg Россия  
Дата: 23.06.21 18:53
Оценка:
Здравствуйте, Yodo, Вы писали:

Y>Самый простой пример. Требуется хранить в базе данных номера кредитных карт. В случае утечки этой базы будет полный П.

С этим вы уже ознакомились?
https://ru.wikipedia.org/wiki/PCI_DSS
https://getpci.com/ru/pci_dss_price_terms/
Re[3]: Как защитить данные пользователей веб-приложения?
От: L.K. Марс  
Дата: 23.06.21 19:28
Оценка:
Y>Самый простой пример — email клиент онлайн, который обязан хранить пароли к вашим ящикам чтобы на них авторизовываться и вытягивать почту.

Почему нельзя хранить пароли на самом клиенте? Зачем тут сервер?

Ну а если (например, в банковской системе) особо важные данные приходится хранить на сервере, то тут не обойтись без физической защиты. Сервер должен быть в защищённом помещении, под надёжной охраной, чтобы никто не мог снять дамп. Плюс особые меры информационной защиты (TPM, data diode и многое другое).
Re[4]: Как защитить данные пользователей веб-приложения?
От: Yodo  
Дата: 24.06.21 06:57
Оценка:
LK>Почему нельзя хранить пароли на самом клиенте? Зачем тут сервер?

Потому что клиент — браузер.

Открыл пользователь браузер в режиме "инкогнито" и ему потребуется вбить 10 паролей чтобы проверить свои 10 ящиков.

Я привел пример данных кредитной карты просто как информации, требующей защиты.

Другой пример — делаем сервис, который подключается к 4 соц сетям и мониторит сообщения.
Опять же надо хранить API ключи к соц-сетям на сервере.
Re[5]: Как защитить данные пользователей веб-приложения?
От: BlackEric http://black-eric.lj.ru
Дата: 24.06.21 07:37
Оценка:
Здравствуйте, Yodo, Вы писали:

Y>Потому что клиент — браузер.


Y>Другой пример — делаем сервис, который подключается к 4 соц сетям и мониторит сообщения.

Y>Опять же надо хранить API ключи к соц-сетям на сервере.

В этом случае в куке браузера вы храните acces-токен для своего сервиса.
А ключи к соц. сетям вы храните на своем сервере и на клиента (в браузер) вам их отдавать не нужно.
Ну да, тут сервер нужен свой и админам платить, что б у них не было желания базы сливать.

Вообще ключи к соц. сетям — это не данные платежных карт. Достаточно поле в бд зашифровать как по мне.
https://github.com/BlackEric001
Re[6]: Как защитить данные пользователей веб-приложения?
От: Yodo  
Дата: 24.06.21 11:21
Оценка:
BE>Вообще ключи к соц. сетям — это не данные платежных карт. Достаточно поле в бд зашифровать как по мне.

Еще пример. Сейчас много платформ предоставляют ключи API. Например, Amazon AWS. Если будут скомпроментированы ключи, от вашего аккаунта можно начать майнить на тысячи долларов мощностей.
И это возможно даже хуже чем потерять на кредитке какие-то деньги.

Еще. API ключ к криптобирже или просто бирже, по которому работает торговый робот.

Однозначно эти данные надо шифровать, если держим в базе. Вопрос — где хранить ключ дешифрования.

Предлагается архитектура с хранением ключа дешифрования на клиенте.

1. Сервер решил получить доступ к соц сети по REST и воспользоваться ключом.
2. Сервер запросил у клиента ключ по защищенному протоколу
3. Клиент передал ключ по защищенному протоколу
4. Сервер использовал ключ, расшифровал им API key в базе, получил данные из соц сети и обнулил ссылку на объект ключа.
key = null;
5. Сборщик мусора удалит из памяти ключ через некоторое время. А если и не удалит String, то даже по дампу сложно будет понять к чему этот ключ относился.

По аналогии с ключами на флэш-носителях. Пока носитель вставлен в USB разъем, все работает. Вытащили — не работает.
Так и здесь, сервер может обращаться к сторонним ресурсам до тех пор пока клиент залогинен в сервисе и разрешает серверу использовать ключ.

Недостаток вижу только один. Если серверу необходимо делать что-то cron-ом периодически, а клиент отвалился, то сервер не может двигаться дальше, т.к. ожидает ключа от клиента.
Re[7]: Как защитить данные пользователей веб-приложения?
От: BlackEric http://black-eric.lj.ru
Дата: 24.06.21 11:52
Оценка:
Здравствуйте, Yodo, Вы писали:


Y>Еще пример. Сейчас много платформ предоставляют ключи API. Например, Amazon AWS. Если будут скомпроментированы ключи, от вашего аккаунта можно начать майнить на тысячи долларов мощностей.

Y>И это возможно даже хуже чем потерять на кредитке какие-то деньги.

Manage Secrets and Protect Sensitive Data

Secure, store and tightly control access to tokens, passwords, certificates, encryption keys for protecting secrets and other sensitive data using a UI, CLI, or HTTP API.

Если уж своим админам не доверяете.
https://github.com/BlackEric001
Re: Как защитить данные пользователей веб-приложения?
От: scf  
Дата: 15.07.21 19:15
Оценка:
Здравствуйте, Yodo, Вы писали:

Y>Самый простой пример. Требуется хранить в базе данных номера кредитных карт. В случае утечки этой базы будет полный П.


Самый простой способ — выделить под оплату отдельный физический сервер и крутить на нем микросервис, который по токену аутентификации пользователя что-то там оплачивает. Номера кредиток хранятся на этом сервере и никогда его не покидают. И, конечно, секьюрити затянуть — файрволл, отдельный ключ для ssh, ограничить кол-во людей, у которых есть доступ и т.д.

Или можно хоститься в облаке, там есть свои способы обеспечения безопасности.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.