Как сохранить базу данных MySQL в безопасности? - PullRequest
9 голосов
/ 11 сентября 2008

Я собираюсь реализовать настройку PHP/mySQL для хранения информации о кредитной карте.

Кажется, что AES_ENCRYPT/AES_DECRYPT это путь,

но я все еще смущен в одном пункте:

Как обеспечить безопасность ключа шифрования?

Встраивание его в мои PHP-скрипты (которые будут жить на том же сервере, что и БД) кажется большой дырой в безопасности.

Какое здесь решение «наилучшей практики»?

Ответы [ 4 ]

15 голосов
/ 11 сентября 2008

Вы должны долго и усердно думать о том, действительно ли вам нужно сохранять CC #. Если у вас нет веских причин, не делайте этого! Каждую неделю вы слышите о взломе какой-то компании и о краже CC #. Все эти компании сделали роковой недостаток - они хранили слишком много информации. Держите CC #, пока транзакция не очищается. После этого удалите его.

Что касается защиты сервера, лучшим способом действий является защита оборудования и использование внутреннего системного сокета для MySQL, а также блокирование любого сетевого доступа к серверу MySQL. Убедитесь, что вы используете как системные разрешения, так и разрешения MySQL, чтобы предоставить как можно меньший доступ. Для некоторых сценариев вы можете рассмотреть аутентификацию только для записи. Там действительно нет метода шифрования, который будет надежным (как вам всегда нужно будет расшифровать, и, следовательно, должны хранить ключ). Это не значит, что вы не должны этого делать - вы можете хранить свой ключ в одном месте, а если вы обнаружите компрометацию системы, вы можете уничтожить файл и сделать данные бесполезными.

3 голосов
/ 24 сентября 2011

MySQL, есть шесть простых шагов, которые вы можете сделать, чтобы защитить ваши конфиденциальные данные.

Шаг 1: удаление символов подстановки в таблицах грантов

Шаг 2: Требовать использования безопасных паролей

Примечание. Используйте параметр MySQL «--secure-auth» для предотвращения использования более старых и менее безопасных форматов паролей MySQL.

Шаг 3: Проверьте права доступа к файлам конфигурации

Шаг 4: Шифрование передач клиент-сервер

Шаг 5: отключить удаленный доступ

Шаг 6: Активно контролировать журнал доступа MySQL

Средства безопасности

0 голосов
/ 15 сентября 2008

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

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

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

0 голосов
/ 11 сентября 2008

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

...