我正在使用php和mysql。我有一个数据库配置文件(db-config.php),它有我的数据库名称,用户名和密码。我的应用程序和db配置文件存储在:www(httpdocs)/app/db-config.php
这样安全吗?其他人/黑客是否能够窃取我的文件并获取我的数据库登录信息?
或者我应该把它放在www文件夹之外,例如:db-config.php存储在www(httpdocs)相同级别的文件夹中。所以在我的应用程序中,我只是这样做:
include_once('../../db-config.php');
它会起作用吗?我的意思是跳到2级到root / www / httpdocs文件夹??
您是否有更安全的方式来存储数据库密码?
答案 0 :(得分:6)
许多公开下载的PHP软件通常在www根文件夹下的目录中都有配置DB密码的配置文件,只要服务器配置正确,就可以了。
对于任何敏感信息(例如带有密码的配置文件),更好的办法是将其存储在外部文档根目录(一个文件夹是标准做法),这是我建议的。
您还可以在将密码保存到配置文件中之前对其进行预加密,然后让软件在使用之前对其进行解密(但这只会将您的密码保存在明文中 - 一个有权访问密码的黑客您的文件的源代码将能够非常轻松地解密存储的密码。)
答案 1 :(得分:1)
希望密码不会打印到屏幕上,但最好还是将它放在目录中,不能通过网络直接访问,是的。您的Web应用程序使用具有最低必要权限的登录也是一个好主意。
我在chroot jail中运行我的web应用程序,这意味着我最终通过本地TCP连接而不是通过套接字连接(例如我使用'127.0.0.1'代替“localhost”)因为unix套接字可以从监狱里面可以看出来。
答案 2 :(得分:1)
没有人能看到.PHP文件的源代码,密码在您放置的任何地方都是安全的,特别是如果您将其保存在您的网站文件夹中(您可以完全控制),请不要将其放入public_ftp文件夹......
也许你可以将它放在public_html文件夹上一级,只是在[极端]情况下有人搞砸了httpd.conf并且PHP停止工作,因此将显示源。
答案 3 :(得分:1)
如果您对Web服务器有足够的控制权,我建议在PHP的 include_path 指令中添加一个目录。然后,你可以这样说:
PHP.ini中的
include_path=/home/xxxx/php_includes:blah.blah.blah
> / home / xxx / php_includes:
create a directory named "config"
create a file named "config/database_config.php"
在PHP文件中:
include_once("config/database_config.php")
易于包含,并安全地在Web根目录之外。
编辑:
您可以使用 set_include_path 命令在运行时执行此操作。此外,如果您使用的是Apache,我认为您可以通过将php_admin_value指令放在.htaccess文件中来为目录设置此项(请参阅php documentation)
答案 4 :(得分:1)
制作一个configuration file
,您可以将所有设置保存在文件中..和
你可以把它留在任何你想要的地方。您需要的只是在需要时打电话。
对于该配置文件,公开无法访问文件权限。
[local]
db_host = localhost
db_user = your_local_database_username
db_pass = **********
db_name = your_local_database_name
[server]
db_host = serverhost
db_user = your_local_database_username
db_pass = **********
db_name = your_server_database_name
<?php
$config_file_location_path = "/var/somelocation/config.ini"
$read_file = parse_ini_file($config_file_location_path, true);
$read_data = $read_file['local'];
$db_config = $read_data;
$db_host = $db_config['db_host'];
$db_user = $db_config['db_user'];
$db_pass = $db_config['db_pass'];
$db_name = $db_config['db_name'];
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$conn) {
die("Could not connect to server : " . mysqli_errno($conn));
}
如果您想使用server
,只需更改$read_data = $read_file['server'];
答案 5 :(得分:0)
将包含文件放在更高级别将起作用。我把它们放在/ var / www中并使用
set_include_path(get_include_path() . PATH_SEPARATOR .'/var/www/'); require_once 'mysqli_connect.inc.php';
密码位于mysqli_connect.inc.php中,但用户无法看到PHP文件的源代码,因为PHP会在将它们发送到您的浏览器之前将其转换为HTML。
据推测,你不允许浏览器查看文件夹的内容 - 没有'directoryindexes',因为Apache会调用它们。