Основы PHP – Где хранить пароль MySQL, используемый PHP

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

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

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

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

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

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

благодаря

Не уверен, что лучшая практика, но вот как я подхожу к ней:

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

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

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

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

надеюсь, это поможет

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

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

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

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