【发布时间】:2011-01-21 16:37:30
【问题描述】:
我目前正在为我教会的大学小组开发一个网站,并且开始有点担心我所写内容的安全性。例如,我使用这个函数:
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 文件的源代码,但如果他们可以,我只能想象我会被冲洗掉。我该怎么办?
【问题讨论】:
-
您对此提出质疑是绝对正确的。 Skilldrick 有正确的答案 - 将敏感数据放在文档根目录之外的文件中。这实际上是我在招聘 PHP 职位时问候选人的一个问题。
-
这里还有一件事,您正在打印一个数据库错误字符串。我会想出一个不同的日志记录方案,这样在生产环境中你就不会打印这样的信息。它公开了有关您的系统的详细信息。如果它是生产的,请将其记录到系统日志、文件之类的内容中,或者给自己发送一封电子邮件,以便您可以在闲暇时对其进行查看。
-
是否有人可以指出正确的方向来查找有关如何将文件放在我的 Web 服务器根目录之外的信息? @josh 感谢您的提醒。
-
无论如何,有些文件将存在于 Web 根目录中。这实际上取决于您的应用程序的结构。最简单的示例是 webroot 中的 index.php,其中包含类似 include("some/dir/outside/of/the/webroot/class.php");
-
保护数据库凭据和保护数据库连接是两件不同的事情 - 从长远来看。
标签: php mysql database security pdo