数据库敏感信息应该放在哪里?

13

可能重复:
如何在PHP中保护数据库密码?

最近我接手了一个 PHP 网站项目,但是我在 PHP 方面没有太多经验。不管怎样,它已经在运行了,但还有很大的改进空间。我感到不舒服的一件事情是我处理数据库的方式:我将数据库连接信息放在一个单独的 db.php 文件中,并在需要时包含它。但我记得看到过很多次由服务器返回的 PHP 源文件。

那么我的问题是:更好或最佳的方法/位置是什么来存储数据库敏感数据呢?

另外,如何防止 PHP 在网页上显示错误信息? 是使用自定义错误页面还是在 php.ini 文件中进行设置?谢谢!

注意:我正在使用 PHP 的旧版本,而不是面向对象的方式。但如果有更好的方法来为未来的项目做准备,我也可以采用面向对象或 MVC 方式。


好的,重要的问题!因为考虑到安全性,给你加上一分。 - David
5
顺便提一下,生产服务器上应始终将display_errors设置为关闭状态。这样,PHP会抛出500错误而不是显示实际错误。 - Pierre-Olivier
我猜测在php.ini中将display_errors = off设置应该可以防止显示任何错误。 - user1231969
如何在PHP中保护数据库密码? - Mike B
3个回答

8
我不知道这是否是您要寻找的内容: 您可以将敏感数据放在db.php文件中,但不要放在Web根目录(public_html或www)之内。
例如,您可以创建一个名为config的目录,它是Web根目录的同级目录,并将db.php文件存储在其中。
您可以像这样包含您的db.php文件:
require_once('../config/db.php');

希望这可以帮到你。

2
对于这个解决方案点赞+1,同时不要忘记将该文件的权限更改为最低但仍可被Web服务器读取。如果该文件由Web服务器进程拥有,也许0600足够安全? - Pierre-Olivier

1

把它放在db.php文件中是可以的,只需在每个文档的开头<?php标签后面使用require_once()即可。

如果基本目录限制没有生效,将db.php文件移动到您的Web/FTP根目录之外,这样它就绝对无法通过http/ftp访问。但要确保此文件的权限设置正确。

由于您没有为代码使用OOP或MVC结构,所以这是最好的方法。


1
我个人会创建一个名为db.php的文件,并将其放置在您服务器上public_html文件夹之上。
例如:
<?php
    error_reporting(0);
    $link = FALSE;
    $link = mysql_connect('hostname', 'username', 'password');
    if ( ! $link)
    {
        die("Couldn't connect to mysql server!");
    } else {
        mysql_select_db('databasename');
    }
?>

这将在连接到数据库的同时关闭错误报告,从你的index.php文件中,你可以像这样包含该文件:

<?php require('../db.php'); ?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接