【发布时间】:2010-12-07 18:46:44
【问题描述】:
目前我将连接数据存储在 php 文件中。但就像最近在 facebook 上发生的那样,php 文件未经处理就出现在屏幕上,为了避免这种情况,他们还有其他选择吗?
【问题讨论】:
标签: mysql connection-string database-connection
目前我将连接数据存储在 php 文件中。但就像最近在 facebook 上发生的那样,php 文件未经处理就出现在屏幕上,为了避免这种情况,他们还有其他选择吗?
【问题讨论】:
标签: mysql connection-string database-connection
将包含连接字符串的文件例如:connect.php 放在 webroot 文件夹之外。
【讨论】:
../connect.php
如果您担心,请添加一个 htaccess 异常,使“连接字符串”文件无法从 Web 访问。
重写规则 /path/to/dbsettings.php /index.php [NC]
我相信这是正确的,虽然在 htaccess 领域有点生疏。任何大师都可以随时纠正我。
【讨论】:
将您的私人连接信息存储在文档根文件夹之外的文件中,并使用 require_once 加载它。
这样,如果出现问题,用户将无法前往 http://yoursite/db.config.php 并下载您的文件。
【讨论】:
我们的解决方案是保留一个很小的 my.cnf,只定义了 [client] 部分。 大多数 MySQL 连接器都有一个“read_defaults_file”指令,允许您直接使用该文件。
然后您可以将该文件置于安全状态,如果用户没有获得该信息的授权,脚本将在该行失败。
如果您至少使用 php5,mysqli::options 完全符合我在指定 MYSQLI_READ_DEFAULT_FILE 时的描述。在较旧的 php 版本上,看起来内置的 parse_ini_file 将完成解析的技巧。
这种方法的优点是与 Perl、Python 和 C 兼容,因此如果您的数据库信息发生变化,您只需更新一个文件,所有应用程序都会保持同步。
【讨论】: