Безопасное (r) хранение информации для входа в MySQL?

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

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

Идеи?

3 ответа

Решение

Обычно информация об аутентификации MySQL хранится во внешнем файле конфигурации. Пользователь MySQL, используемый веб-приложением, имеет ограниченные разрешения, такие как SELECT, INSERT, UPDATE, DELETE и не предоставлены разрешения, такие как ALTER, DROP, DELETE, Если вы хотите опубликовать код для общего пользования, вы бы не включили свой личный конфигурационный файл, а вместо этого общий / инструктивный / минимальный конфигурационный файл.

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

Безопасность может быть обеспечена путем хранения любой жестко запрограммированной информации (в файлах конфигурации или сценариях) вне корневого веб-узла и путем подавления (в рабочем коде) сообщений об ошибках. Таким образом, надеюсь, ваши пользователи не увидят этого userValidate() expects exactly three paramaters,

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

pygorex1 также прав на разрешения пользователя. Ограничение доступа пользователя mysql до минимума всегда является предпочтительным. Даже если хакер получит ваш пароль и имя пользователя mysql, он не сможет нанести существенный ущерб, если права пользователя ограничиваются, например, SELECT-запросами. Он забыл упомянуть, что пользователю mysql разрешается входить только с локального хоста (или с любого хоста, на котором работает веб-приложение), и никогда не использовать подстановочные знаки в разрешенных хостах.

Другие вопросы по тегам