В настоящее время я работаю над сайтом группы колледжей моей церкви, и я начал немного беспокоиться о безопасности того, что я пишу. Например, я использую эту функцию:
function dbConnect() { global $dbcon; $dbInfo['server'] = "localhost"; $dbInfo['database'] = "users"; $dbInfo['username'] = "root"; $dbInfo['password'] = "password"; $con = "mysql:host=" . $dbInfo['server'] . "; dbname=" . $dbInfo['database']; $dbcon = new PDO($con, $dbInfo['username'], $dbInfo['password']); $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $error = $dbcon->errorInfo(); if($error[0] != "") { print "<p>DATABASE CONNECTION ERROR:</p>"; print_r($error); } }
для подключения к базе данных всякий раз, когда я выполняю какой-либо запрос. Я всегда использую подготовленные заявления PDO для предотвращения внедрения SQL из любого пользовательского ввода, и я использую htmlspecialchars для выхода до вывода. Мой вопрос заключается в следующем: как защитить свое имя пользователя и пароль для моей базы данных? Я не знаю, может ли кто-нибудь просмотреть исходный код для моих PHP-файлов, но если бы они могли, я могу только представить, что меня будут звать. Что я делаю?
Вы должны поместить свои учетные данные в файл за пределы корня документа, поэтому, если что-то испортится, и ваш PHP будет показан пользователям без разоблачения, никто не сможет увидеть ваш пароль.
Посмотри на эта статья по этому вопросу эта статья на эту тему :
Решение прост. Поместите все конфиденциальные данные вне корневого каталога вашего веб-сервера. Многие эксперты теперь выступают за размещение большинства, если не всех, вашего php-кода за пределами корня документа вашего веб-сервера. Поскольку PHP не ограничен теми же ограничениями, вы являетесь веб-сервером, вы можете сделать каталог на том же уровне, что и ваш корневой каталог, и разместить там все свои конфиденциальные данные и код.
Хорошо, это нуждается в некоторых разъяснениях. Некоторые предположили, что вы помещаете конфиденциальные данные за пределы корня документа. Это имеет некоторые достоинства, но больше плацебо, чем что-либо еще в практичности.
Вы должны рассмотреть потенциальные источники проблем.
Кто-то, имеющий доступ к оболочке на компьютере, скомпрометирует вашу информацию о подключении к базе данных независимо от того, где вы ее разместили. Это может включать как авторизованных пользователей, так и тех, кто использует уязвимость для получения доступа к оболочке (это произошло много);
Если PHP отключен или веб-сервер обманут в мысли, значит, есть вероятность, что файлы PHP будут обслуживаться в необработанном виде. Помещение их вне корня документа защитит вас от этого;
Если кому-то удается написать скрипт PHP для корневого каталога документа, это в основном то же самое, что и у кого-то, имеющего доступ к оболочке, поэтому никакая мера не защитит вас.
Практически, если ваш веб-сервер взломан, это то, что ваши файлы конфигурации находятся за пределами корня документа, будут защищать вас, вы вряд ли сможете это сделать.
Главное в безопасности с базами данных – убедиться, что кто-то из Интернета не может подключиться напрямую. Это можно сделать с помощью брандмауэра, привязывая базу данных к частному IP-адресу или помещая базу данных на частный сервер.
Существуют меры предосторожности, которые вы можете предпринять. Создайте пользователя mySQL, который зависит от того, что ваше приложение должно делать. Это может ограничить количество ущерба, наносимого злоумышленником, если он скомпрометирует ваше имя пользователя и пароль. Например, разрешите пользователю вставлять, обновлять, выбирать и т. Д., Но НЕ отбрасывать и т. Д. Кроме того, как упоминалось выше, база данных не должна быть доступна снаружи. В среде общего хостинга это обычно означает, что db может быть подключен только с вашего www-сервера или локального хоста.
Re: kalpaitch, не пропускайте свой пароль в каком-то обратимом хеше. Люди никогда не должны видеть ваш источник.