Сбой безопасности SQL connect.php?

90
11

Я просто пишу PHP файл для подключения к моему SQL-серверу для системы входа в систему, и я боюсь, что я просто оставлю массивные дыры в безопасности.


У меня есть файл connect.php в каталоге корневого каталога веб-сайтов с этим в нем:


$db = new mysqli('localhost', 'publicguest', '**********', 'website');

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

спросил(а) 2021-01-19T18:06:19+03:00 6 месяцев, 1 неделя назад
1
Решение
90

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


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

Если вы действительно хотите быть неясными в этом, вы также можете зашифровать эти настройки.

ответил(а) 2021-01-19T18:06:19+03:00 6 месяцев, 1 неделя назад
89

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

Чтобы избежать этого, вы можете поместить файл над корневым каталогом документа.

ответил(а) 2021-01-19T18:06:19+03:00 6 месяцев, 1 неделя назад
65

Если злоумышленник не имеет FTP/прямого доступа к файлам, это не является угрозой безопасности, поскольку файл PHP обрабатывается до вывода его клиенту.


Если злоумышленник имеет FTP/прямой доступ, информация о mysql auth является наименьшей из проблем!


Wordpress хранит данные входа в mysql в ясном тексте в wp-config.php, joomla делает то же самое, нет другого способа сделать это, я думаю.

ответил(а) 2021-01-19T18:06:19+03:00 6 месяцев, 1 неделя назад
64

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


Это должно помочь вам глубже в аргументе:
http://www.mediawiki.org/wiki/Manual:Securing_database_passwords

ответил(а) 2021-01-19T18:06:19+03:00 6 месяцев, 1 неделя назад
46

Единственное, что я изменил бы в этой строке кода, это получить имя пользователя и пароль из этой конкретной строки, например:


$host = 'localhost';
$user = 'publicguest';
$pass = 'hunter2';
$database = 'website';

$db = new mysqli($host, $user, $pass, $database);


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


Если вы действительно хотите быть параноиком, вы можете позвонить:


unset($user);
unset($pass);

После того, как соединение пройдет, но это действительно защитит вас от инъекции кода, и пока вы никогда не используете eval(), все должно быть в порядке. [серьезно, никогда. >:I]


Что-нибудь еще, что люди в этой теме предлагают просто параноидально, потому что, как только кто-то имеет доступ к вашему файлу на уровне файлов, у них есть ключи от вашего королевства в любом случае, и игра заканчивается. Но с сердцем! 99 раз 100 никто не заботится о вашем коде или вашей базе данных, они просто хотят ввести свой собственный код для отправки спама и/или DOS другим людям. :P

ответил(а) 2021-01-19T18:06:19+03:00 6 месяцев, 1 неделя назад
46

По большей части это безопасно, если:


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


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

ответил(а) 2021-01-19T18:06:19+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема