Сколько запросов мое приложение сможет обрабатывать одновременно с этим утверждением?
blockquote>Это сильно зависит от вашего приложения. Каждый новый запрос будет иметь поток запущен - он зависит от того, сколько потоков ваша машина может обрабатывать. Я не вижу возможности ограничить количество потоков (например, uwsgi-предложения в производственном развертывании).
Каковы недостатки этого использования? Если я не ожидаю более нескольких запросов одновременно, могу ли я продолжать использовать это?
blockquote>Переход от одного потока к многопоточному может привести к ошибкам параллелизма ... if вы используете это, будьте осторожны с тем, как вы обрабатываете глобальные объекты (см. объект g в документации!) и состояние.
Несколько человек неправильно понимают это как вопрос о том, как хранить пароли в базе данных. Это не правильно. Речь идет о том, как сохранить пароль, который позволяет получить доступ к базе данных.
Обычным решением является перевести пароль из исходного кода в файл конфигурации. Затем оставьте администрирование и сохраните файл конфигурации до системных администраторов. Таким образом, разработчикам не нужно ничего знать о производственных паролях, и в вашем источнике-источнике нет записи пароля.
Мы решили это следующим образом:
Лучший способ - не хранить пароль вообще! Например, если вы находитесь в системе Windows и подключаетесь к SQL Server, вы можете использовать Integrated Authentication для подключения к базе данных без пароля, используя идентификатор текущего процесса.
Если вам нужно подключиться к паролю, сначала зашифровать его, используя сильное шифрование (например, используя AES-256, а затем защитить ключ шифрования или использовать асимметричное шифрование и защитить ОС от сертификата), а затем сохранить его в файле конфигурации (за пределами веб-каталог) с сильными ACL.
, если возможно создать соединение с базой данных в том же файле, где хранятся учетные данные. Вставьте учетные данные в оператор соединения.
mysql_connect("localhost", "me", "mypass");
В противном случае лучше отключить учетные данные после инструкции connect, поскольку учетные данные, которые не находятся в памяти, не могут быть считаны из памяти ;)
include("/outside-webroot/db_settings.php");
mysql_connect("localhost", $db_user, $db_pass);
unset ($db_user, $db_pass);
Поместите пароль базы данных в файл, сделайте его доступным только для чтения пользователю, обслуживающему файлы.
Если у вас есть какие-то средства, позволяющие процессу php-сервера обращаться к базе данных, это довольно много всего, что вы можете сделать.
Раньше мы сохраняли DB пользователя / pass в файле конфигурации, но с тех пор попадали в параноидальный режим - применяя политику Defense in Depth .
Если ваше приложение скомпрометировано , пользователь получит доступ к вашему конфигурационному файлу и, следовательно, есть вероятность, что взломщик сможет прочитать эту информацию. Файлы конфигурации также могут попасть в управление версиями или скопировать серверы.
Мы переключились на сохранение пользовательских / pass в переменных среды, установленных в Apache VirtualHost. Эта конфигурация читается только root: надеюсь, что ваш пользователь Apache не работает как root.
Кон таким образом, что теперь пароль находится в глобальной переменной PHP.
To смягчите этот риск, мы имеем следующие меры предосторожности:
phpinfo()
отключен. PHPInfo - это легкая цель получить обзор всего, включая переменные среды. include('../otherDirectory/configfile.conf')
?
– mtk
5 January 2013 в 19:23
Самый безопасный способ - вообще не иметь информацию, указанную в вашем PHP-коде.
Если вы используете Apache, это означает установить данные соединения в файле httpd.conf или virtual hosts файл. Если вы это сделаете, вы можете вызывать mysql_connect () без параметров, что означает, что PHP никогда не будет выводить вашу информацию.
Вот как вы указываете эти значения в этих файлах:
php_value mysql.default.user myusername
php_value mysql.default.password mypassword
php_value mysql.default.host server
Затем вы открываете свое соединение mysql следующим образом:
<?php
$db = mysqli_connect();
Или вот так:
<?php
$db = mysqli_connect(ini_get("mysql.default.user"),
ini_get("mysql.default.password"),
ini_get("mysql.default.host"));
ini_get()
.
– Marki555
21 March 2016 в 18:50
but any user (or a hacker abusing badly written php script) can read the password via ini_get()
Как вы справляетесь с этим?
– tonix
22 May 2016 в 10:20
ini_get()
или getenv()
.
– Lars Nyström
23 May 2016 в 08:32
Если вы говорите о пароле базы данных, в отличие от пароля, поступающего из браузера, стандартная практика, похоже, заключается в том, чтобы поместить пароль базы данных в файл конфигурации PHP на сервере.
Вы просто должны быть уверены, что файл php, содержащий пароль, имеет соответствующие разрешения на него. То есть он должен быть доступен только для веб-сервера и вашей учетной записи пользователя.
Если вы используете PostgreSQL, он автоматически заглядывает в ~/.pgpass
для паролей. Дополнительную информацию см. В руководстве .
Если вы размещаете на чужом сервере и не имеете доступа за пределы вашего веб-сайта, вы всегда можете поместить свой пароль и / или соединение с базой данных в файл, а затем заблокировать файл с помощью .htaccess:
<files mypasswdfile>
order allow,deny
deny from all
</files>
Это решение является общим, поскольку оно полезно как для открытых, так и для закрытых исходных приложений.
Преимущества:
Этот метод предложен Хероку, который очень успешен.
Для чрезвычайно безопасных систем мы шифруем пароль базы данных в файле конфигурации (который сам защищен системным администратором). При запуске приложения / сервера приложение затем запрашивает системный администратор для ключа дешифрования. Затем пароль базы данных считывается из файла конфигурации, дешифруется и сохраняется в памяти для будущего использования. Все еще не на 100% безопаснее, поскольку он хранится в дешифрованной памяти, но вы должны называть его «достаточно безопасным» в какой-то момент!
Просто поместить его в конфигурационный файл где-то так, как это обычно делается. Просто убедитесь, что вы:
Я думаю, что OP означает пароль базы данных.
Если кто-то не получает доступ к вашему серверу через FTP или SSH (в этом случае вы уже подключены), я бы не стал беспокоиться о сохранении паролей в открытый текст в файлах PHP. Большинство приложений PHP, которые я видел, делают это так, например phpbb.
Ваш выбор ограничен, так как вы говорите, что вам нужен пароль для доступа к базе данных. Один общий подход заключается в том, чтобы сохранить имя пользователя и пароль в отдельном файле конфигурации, а не в главном скрипте. Затем обязательно сохраните это за пределами основного веб-дерева. Это было, если есть проблема с веб-конфигурацией, которая оставляет ваши php-файлы просто отображаемыми в виде текста, а не выполняется, вы не открыли пароль.
Кроме того, что вы находитесь на правильных строках с минимальным доступом для используемой учетной записи. Добавьте к этому
Peter