2016-07-01 2 views
-1

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

Платформа взаимодействует между файлом php и базой данных mysql. Персональный ключ пользователя определяется session_id, указанным после входа в систему.

Таблица 1: Пользователи (user_id, email, password и т. Д.) - это хранит соответствующие данные для любого пользователя для входа на нашу платформу и доступа к любому из наших шаблонов.

Таблица 2: User_template1_data (template_user_id, user_id, адрес электронной почты, имя, конкретная информация.), Это хранит конкретные данные в шаблон данных

Таблица 3,4,5,6: журналы (log_id , дата, детали, template_user_id и т. д.).

В журнале таблиц (которые могут быть, платежей, рабочие места, «просторы» и т.д.) мы будем хранить конфиденциальные данные, что никто, кроме пользователя не может читать, даже не админы, если предоставлен доступ к нему.

Теперь, как я имел в виду, было следующее:

Пример:

Таблица 1:

user_id - Name - email - pass 
1 - Jay - jay.. - (salt/hashed) 

Таблица 2:

User_template1_data, user_id, division * 
1 - 1 - Jay - jay.. - accountant 

php увидит, что пользователь 1, очевидно, является бухгалтером. Это не очень чувствительные данные.

Как всегда в таблице 3 мы добавим следующие данные:

> log_id - User_template1_data - date - client - earnings 1 - 1 - 
> 2016,01,01 - Gucci SLR - 5000,00 2 - 1 - 2016,02,01 - Prada SLR - 
> 51000,00 3 - 1 - 2016,03,01 - Chanel SLR - 15000,00 

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

> log_id - User_template1_data - date - client - earnings 1 - hash and 
> salt the User_template1_data - 2016-01-01 - Gucci SLR - 5000 2 - hash 
> and salt the User_template1_data - 2016-02,01 - Prada SLR - 51000 3 - 
> hash and salt the User_template1_data - 2016-03-01 - Chanel SLR - 
> 15000 

Таким образом, только человек, который вошел в систему, запоминает конфиденциальные данные encrpyted, он не будет быть дешифровать тогда.

Я новобранец шифрованию SO Пожалуйста, сообщите мне, если я ошибаюсь Самое главное, что шифрование я должен использовать, как я должен строить его и т.д. Очень высокую оценку!

+0

Я немного смущен. Какую часть вы хотите просто зашифровать? Все данные, хранящиеся в базе данных? Для самих безопасных соединений вам понадобится SSL, но для потерянных данных. – Matt

+0

К счастью, у меня есть [этот пост] (https://paragonie.com/white-paper/2015-secure-php-data-encryption#index-encrypted-information), который открывается прямо сейчас, поэтому дайте ему прочитать. – Martin

+0

Если вы имеете дело с Финансовыми данными/транзакциями, прекратите делать это самостоятельно и используйте установленную защищенную систему. *** НЕ *** катите свои собственные. – Martin

ответ

0

В целом вы должны настроить базу данных, чтобы ей было доверено быть в безопасности, но это может быть забавный эксперимент, чтобы решить эту проблему. Наиболее важная часть - использование стандартных методов шифрования на вашем языке программирования, в случае, если php перейдет на пакет openssl.

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

я пошел бы на что-то вроде

  • Используйте ключ шифрования, который вы хранить зашифрованные с паролем пользователей, которые вы расшифровывать и положить в сессии, когда журнал пользователя. Конечно убедитесь, что сеансы шифруются на диск и вы храните пароль с помощью bcrypt, но зашифровываете ключ, используя текстовый пароль, чтобы ключ шифрования не был найден.
  • При хранении конфиденциальных данных шифрует его с помощью ключа в сессии и при получении данных расшифровать его, используя один и тот же ключ
  • Не забывайте обновлять хранимую зашифрованный ключ, когда изменение пароля пользователя

Я предлагаю использовать AES -256-CBC для шифрования.

Если это будет использовано для чего-то большего, чем для экспериментов или обучения, я предлагаю сначала искать существующие решения для этого.

Также помните, если пользователь забудет пароль, он не сможет вернуть данные

+0

Спасибо @rypskar! это имеет для меня большой смысл, как вы его описываете! Теперь единственными проблемами были бы: действительно, что, если человек потеряет пароль. Во-вторых, как можно хранить ключ шифрования в пароле, есть ли конкретная функция ready2use? –

+0

Если человек теряет пароль, его данные теряются, поэтому вы должны искать существующее программное обеспечение для этого, если это то, что вы хотите использовать на производстве. Для хранения ключа шифрования вам нужен отдельный столбец в базе данных, который вы можете зашифровать с помощью 'openssl_encrypt ($ data, AES-256-CBC, $ password)' и использовать openssl_decrypt так же, как расшифровать его. Опять же предупреждение всем, кто хочет попробовать это, создавая свой собственный уровень безопасности, является хорошим способом изучения и понимания безопасности, но для производства лучше всего всегда использовать существующее программное обеспечение, которое проверяется экспертами по безопасности – rypskar

Смежные вопросы