Как запутать отношения между 2 пользователями в БД? - PullRequest
0 голосов
/ 21 февраля 2019

Я храню взаимную дружбу между двумя пользователями в моей таблице SQL.Строка выглядит как

friendship_id | user_id_1 | user_id_2

(для простоты я также решил сохранить

friendship_id | user_id_2 | user_id_1

)

Моя проблема: в случае утечкиу хакера была бы эта таблица и таблица, связывающая user_id с адресами электронной почты и другими пользовательскими данными, позволяя ему связывать имена друзей.Чего я действительно хочу избежать: я не хочу, чтобы кто-нибудь знал, кто с кем дружит.Поэтому я хотел бы зашифровать / hash / obfuscate / anonymize user_id в этой таблице (чтобы сделать его бесполезным в случае утечки).

Я думал о чем-то вроде

friendship_id | hashed_user_id_1 | hashed_user_id_2

Правильно ли мое рассуждение?И если да, то как правильно это осуществить?(Я использую PHP).

Я думал об использовании функции password_hash, но я не уверен, как будут выглядеть мои запросы SQL при использовании password_verify.

Или, возможно, с использованием несколькихитераций sha256 + уникальная соль будет достаточно?Но значит ли это, что я должен генерировать и хранить уникальную соль для каждой дружбы?

1 Ответ

0 голосов
/ 21 февраля 2019

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

Мое предложение: Постарайтесь сохранить все данные о взаимосвязях в открытом доступе на на стороне клиента .

Что это значит?это означает, что если злоумышленник получит доступ к серверу, он не сможет получить пользователей от отношений.Это означает, что код будет намного более сложным, но более безопасным.

Как вы реализуете это?

Это просто не в моей голове, поэтому людям нужнопроанализируй это больше.Но вот быстрое решение:

1-Создать ключ из прохода пользователя: это можно сделать, например, с помощью генерации ключа PKCS5 на основе пароля.Допустим, ключ K.Отношение пользователя 2-Encrypt поставляется на стороне клиента с K (например, с JavaScript).затем добавьте friendship_id к вашим данным.У вас будут такие данные:

DATA = friendship_id || ENC(user_id_2 || user_id_1 || random_nounce, K)

3-Save DATA на сервере SQL, поэтому, когда вам понадобится дружба, вы можете найти DATA с friendship_id.4-Всякий раз, когда пользователь хочет увидеть список друзей, он просто расшифровывает DATA на стороне клиента и будет иметь список идентификаторов своих друзей.Теперь он будет отправлять отдельные запросы для получения информации для этих идентификаторов пользователей.

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

Если вы не хотитеЧто-нибудь на стороне клиента, вы можете достичь чего-то, используя процедуры магазина.Храните идентификатор пользователя друга в зашифрованном виде на сервере и используйте хранимую процедуру для их получения, передавая friendship_id, K от клиента.

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