Основы PHP - Где хранить пароль MySQL, используемый PHP - PullRequest
4 голосов
/ 12 июня 2011

Я новичок в веб-разработке и изучаю PHP, чтобы продавать несколько двоичных файлов (общий хост Linux). Сайт еще не запущен.

Мои php-скрипты (50% заимствованный код, 50% написаны самостоятельно, 95% полностью понятны) входят в MySQL, чтобы ПРОЧИТАТЬ предметы для продажи, и ЗАПИСАТЬ данные транзакций продажи в другую таблицу. Файл Functions.php, расположенный в подпапке webroot, содержит логин и пароль для MySQL.

Q1. Это не кажется мне безопасным. Как следует хранить информацию о логине / пароле, чтобы скрипты могли получить к ней доступ? Если functions.php хранится вне webroot, могут ли это быть файлы .php, расположенные в webroot #include (PHP "require_once")? (Я попробовал это однажды, и мои скрипты сломались таким образом, что, казалось, они были связаны с разрешениями - если бы я знал, что должно работать, я бы продолжал к этому подключаться)

Q2. Я не уверен, где хранить двоичные файлы, которые покупатели могут загрузить. Верно ли, что опытные пользователи могут каким-то образом найти / загрузить их (без оплаты), если я просто сохраню их в подпапке webroot? Можно ли использовать файл .htaccess, чтобы заблокировать доступ к папке «binaries» в webroot? Могут ли черные шляпы получить / изменить файл .htaccess?

Q3. Было бы лучше сохранить двоичные файлы (максимум = 4 МБ) в таблице MySQL и скопировать их оттуда во временный файл в webroot перед каждой загрузкой, а затем удалить?

Q4. Кто-нибудь может порекомендовать набор сценариев, управляющих такими вещами, которые я мог бы пересмотреть / изменить, а не изобретать велосипед?

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 июня 2011

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

Q2 - Двоичные файлы также должны храниться вне webroot.Идеальный способ их обслуживания - загрузить их через файл PHP.Таким образом, вы можете выполнить аутентификацию до того, как файл будет обработан, и вы можете сделать ссылки временными, чтобы пользователи не могли делиться ими с другими людьми

Q3. Если вы используете вышеуказанный метод, вам не нужносохраните это как BLOB в MySQL

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

1 голос
/ 12 июня 2011

Не уверен, что это лучший метод, но я бы подошел так:

В1: Я храню информацию для входа в MySQL вместе с локальными путями и другими настройками в файле config.inc.php внекорень сети.Затем я могу включить это в начало каждого сценария.Я также использую database.inc.php, который подключается к MySQL и выбирает базу данных (плюс несколько функций базы данных).Теоретически, это не небезопасно в корне сети, так как при непосредственном вызове выполняется только PHP, а не его содержимое.Хранение конфигурации XML или аналогичного файла отличается, однако!

Q2: Если загружаемые двоичные файлы хранятся в корневом веб-каталоге, их можно загрузить, если найден правильный URL-адрес.Вместо этого они должны храниться вне веб-корня, а PHP-сценарий «шлюза» обслуживает содержимое этих файлов, если запрос удовлетворяет правильным условиям.Возможно, вы захотите хранить токен с каждой покупкой в ​​вашей базе данных, и только действительные токены могут загружать файлы.Пример сценария загрузки: здесь .

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

Q4: Вы можете попробовать существующее программное обеспечение для корзины покупок.Magento поддерживает загружаемые продукты .

Надеюсь, что поможет

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