Наиболее важной мерой безопасности, как описано в предыдущих ответах, является правильная конфигурация веб-сервера.
При создании файла конфигурации, к которому никогда не следует обращаться напрямую, вы можете безопасно разместить его вне корневого сервера сервера или в каталоге, для которого сервер настроен так, чтобы не обслуживать файлы. Пока файл имеет соответствующие разрешения, вы можете include()
без помощи веб-сервера.
Если по какой-либо причине вы решите придерживаться конфигурационного файла в доступном месте, вы можете использовать трюк define()
для предотвращения несанкционированного выполнения. Это делается путем определения константы в файле для включения файла конфигурации до фактического include()
, а затем проверки наличия константы в самом файле конфигурации.
example.php:
<?php
define ('my_const', 1);
include ('config.php');
echo $super_secret_data;
?>
config.php:
<?php
if (!defined ('my_const'))
die();
$super_secret_data = 42;
?>
Конечно, единственное преимущество безопасности является то, что исполняемый код не будет работать без постоянной, если доступ к странице непосредственно , и что его данные не будут доступны для файлов, которые не определяют константу (что довольно плохой безопасности через неизвестность, поскольку вы, вероятно, все еще можете позвонить getfilecontents()
в файл).
Вы имеете в виду дать разрешение пользователю, что веб-сервер запущен как – Mike
, который будет chmod до 600 и сделает владельца веб-сервера, но я считаю, что chmod до 640 хранит владельца файла отдельно и дает веб-серверу как группу лучше, потому что в случае компромисса они могут быть прочитаны только – PoX
Я не говорю о файловом режиме, я говорю о владельце файла. Веб-сервер должен иметь доступ к учетным данным, а не к пользователю базы данных. Довольно это не тот же пользователь. – Mike