我刚开始学习PHP并完成了我的第一个PHP& MySQL for dummies book我担心在PHP应用程序和MySQL数据库之间建立安全连接。
根据我的了解,一种方法是使用数据库凭据创建.php文件,例如:
--- database.php ---
<?php
define('HOST', 'localhost');
define('DB_USR' , 'mysql_username');
define('DB_PSWD' , 'mysql_password');
define('DB_NAME' , 'mysql_newbie');
?>
然后放置require_once('database.php')
在每个需要任何类型的数据库查询的PHP页面中。
我担心这种方法是否安全。一旦将文件放在网络服务器上,是不是文件database.php都可以访问? 任何人都有可能阅读数据库的凭据并弄乱他的方式吗?
有什么想法吗?
答案 0 :(得分:6)
首先要注意的是不同的攻击媒介。
一个向量是通过HTTP传入的远程用户,另一个主要向量是具有shell访问权限的本地用户或类似的机器。
防止第一个相对容易:确保不通过HTTP共享内容。一种简单的方法是调用文件.php
,以便当用户猜到名称时执行PHP脚本并且不产生输出(这就是你已经做过的事情)稍微好一点就是阻止从服务器配置访问文件。这两种方法仍然取决于您的操作,以确保您不会意外中断配置。
更好的方法是将文件移出Web根目录,进入完全不同的目录。文档根目录外的文件无法通过服务器访问,因此永远不会泄漏。
为防止本地攻击,保护是限制对Web服务器的访问权限(即使其由Web服务器拥有并仅向该用户帐户授予读取权限),但这仍然为可以攻击的攻击者留下了一个向量在服务器的不同vhost中安装脚本(如果它是分片服务器)缓解可能是PHP的“open_basedir”设置,其中PHP阻止访问不同目录中的文件。必须在服务器的配置中按vhost配置。
答案 1 :(得分:0)
database.php中没有echo或其他输出,因此没有人能够在Web上读取它的内容,因为它将呈现一个空页面。 另一个好主意是将此文件放入不能直接从Web访问的目录中,只能从您的脚本中访问。
另一个问题是使用mysql。旧的mysql扩展在php5中已弃用,并在版本7中从php中删除。 你应该使用mysqli扩展,或者寻找像PDO这样的数据库包装层。