Безопасное (r) хранение информации для входа в MySQL? - PullRequest
1 голос
/ 02 декабря 2009

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

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

Идеи? * * 1005

Ответы [ 3 ]

4 голосов
/ 02 декабря 2009

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

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

1 голос
/ 02 декабря 2009

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

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

1 голос
/ 02 декабря 2009

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

...