使用PHP保护SQL数据库凭据的最佳实践


Best practice securing SQL Database Credentials with PHP

我目前有一个网页,它从SQL数据库中提取数据,并使用php显示数据以处理连接和查询。

我目前正在我的PHP文件中使用这个片段来连接和提取数据:

$conn = odbc_connect(
    "DRIVER={SQL Server Native Client 10.0};Server=xxx.xxx.xxx.xxx;Database=databasename", "username", "password");
if (!($conn)) { 
    echo "<p>Connection to DB via ODBC failed: ";
    echo odbc_errormsg ($conn );
    echo "</p>'n";
}

有人看到这个漏洞吗?有没有我应该使用的练习?

我会将这样的代码放入PHP类文件中,并根据DAO模式(数据访问对象)对其进行建模。然后,对需要读取/写入数据库的脚本使用requirerequire_once指令。

这减少了重复,并遵循D.R.Y(不要重复自己),当其他脚本/代码需要读/写到同一个DB时,你已经有了这样做的方法。

我建议不要将错误消息打印到屏幕上。无论如何,将其记录到一个文件中(或者查看错误日志以查看发生了什么)。

正如Adam T所建议的,这种类型的代码肯定应该被捕获在一个单独的文件中,该文件可以在整个应用程序中重复使用(也许已经是这样了——从给出的细节来看还不清楚)。

如果你查看任何CMS系统,例如WordPress、Joomla或Drupal,你会发现它们都以明文形式将DB凭据存储在config.php文件或类似文件中,这些文件在请求处理周期的早期就被读取。

不过,对于漏洞,最终,您必须将登录凭据放在PHP代码可以访问的地方,因此,要么必须将其以明文形式存储在PHP或文本文件中,以便包含或读取,要么以某种方式进行模糊处理,尽管这通常是浪费时间和精力。

最好的办法是确保包含登录凭据的文件通过文件系统权限得到适当的保护,以防止未经授权的窥探者访问。