当PHP应用程序建立数据库连接时,当然通常需要传递登录名和密码。如果我对我的应用程序使用一个最小权限的登录,那么PHP需要知道这个登录名和密码。保护密码的最好方法是什么?只在PHP代码中编写它似乎不是一个好主意。
当前回答
是否可以在存储凭据的同一文件中创建数据库连接。将凭据内联到connect语句中。
mysql_connect("localhost", "me", "mypass");
否则最好在connect语句之后取消设置凭据,因为不在内存中的凭据不能从内存中读取;)
include("/outside-webroot/db_settings.php");
mysql_connect("localhost", $db_user, $db_pass);
unset ($db_user, $db_pass);
其他回答
我们是这样解决的:
Use memcache on server, with open connection from other password server. Save to memcache the password (or even all the password.php file encrypted) plus the decrypt key. The web site, calls the memcache key holding the password file passphrase and decrypt in memory all the passwords. The password server send a new encrypted password file every 5 minutes. If you using encrypted password.php on your project, you put an audit, that check if this file was touched externally - or viewed. When this happens, you automatically can clean the memory, as well as close the server for access.
如果谈论的是数据库密码,而不是来自浏览器的密码,标准的做法似乎是将数据库密码放在服务器上的PHP配置文件中。
您只需要确保包含密码的php文件具有适当的权限即可。也就是说,它应该是可读的只有web服务器和您的用户帐户。
最安全的方法是在PHP代码中完全不指定这些信息。
如果你使用Apache,这意味着在httpd.conf或虚拟主机文件中设置连接细节。如果你这样做,你可以不带参数地调用mysql_connect(),这意味着PHP永远不会输出你的信息。
这是你在这些文件中指定这些值的方法:
php_value mysql.default.user myusername
php_value mysql.default.password mypassword
php_value mysql.default.host server
然后像这样打开mysql连接:
<?php
$db = mysqli_connect();
或者像这样:
<?php
$db = mysqli_connect(ini_get("mysql.default.user"),
ini_get("mysql.default.password"),
ini_get("mysql.default.host"));
将它们存储在web根目录外的一个文件中。
有些人把这个问题误解为如何在数据库中存储密码。这是错误的。它是关于如何存储密码,让您进入数据库。
通常的解决方案是将密码从源代码移到配置文件中。然后,将管理和保护配置文件的工作交给系统管理员。这样,开发人员就不需要知道任何关于产品密码的信息,并且在源代码控制中也没有密码记录。
推荐文章
- 将表从一个数据库复制到另一个数据库的最简单方法?
- 主体、使用者和主体之间的意义和区别是什么?
- 什么是分片,为什么它很重要?
- 如何从一个查询插入多行使用雄辩/流利
- 数据库触发器是必要的吗?
- 在PHP单元测试执行期间,如何在CLI中输出?
- 在PHP中使用heredoc的优势是什么?
- PHP中的echo, print和print_r有什么区别?
- 为什么我应该使用基于文档的数据库而不是关系数据库?
- 哪个更快/最好?SELECT *或SELECT columnn1, colum2, column3等
- 将值从同一表中的一列复制到另一列
- 如何将XML转换成PHP数组?
- 什么是数据库池?
- 如何将对象转换为数组?
- 关于数据库,每个开发人员应该知道些什么?