当PHP应用程序建立数据库连接时,当然通常需要传递登录名和密码。如果我对我的应用程序使用一个最小权限的登录,那么PHP需要知道这个登录名和密码。保护密码的最好方法是什么?只在PHP代码中编写它似乎不是一个好主意。
当前回答
将它们存储在web根目录外的一个文件中。
其他回答
如果谈论的是数据库密码,而不是来自浏览器的密码,标准的做法似乎是将数据库密码放在服务器上的PHP配置文件中。
您只需要确保包含密码的php文件具有适当的权限即可。也就是说,它应该是可读的只有web服务器和您的用户帐户。
如果你正在使用PostgreSQL,那么它在~/。Pgpass自动设置密码。有关更多信息,请参阅手册。
有些人把这个问题误解为如何在数据库中存储密码。这是错误的。它是关于如何存储密码,让您进入数据库。
通常的解决方案是将密码从源代码移到配置文件中。然后,将管理和保护配置文件的工作交给系统管理员。这样,开发人员就不需要知道任何关于产品密码的信息,并且在源代码控制中也没有密码记录。
这个解决方案是通用的,因为它对开放源代码和闭源应用程序都有用。
为应用程序创建一个操作系统用户。参见http://en.wikipedia.org/wiki/Principle_of_least_privilege 用密码为该用户创建一个(非会话)操作系统环境变量 作为该用户运行应用程序
优点:
您不会意外地将密码检入源代码控制,因为您不能这样做 您不会意外地搞砸文件权限。你可能会,但这不会影响这个。 只能由root或该用户读取。Root可以读取你所有的文件和加密密钥。 如果使用加密,如何安全地存储密钥? 作品x-platform 请确保不要将envvar传递给不受信任的子进程
这个方法是Heroku提出的,他很成功。
对于非常安全的系统,我们在配置文件中加密数据库密码(该文件本身由系统管理员保护)。在应用程序/服务器启动时,应用程序会提示系统管理员输入解密密钥。然后从配置文件中读取数据库密码,解密并存储在内存中以供将来使用。仍然不是100%安全,因为它存储在内存中解密,但你必须在某些时候称它“足够安全”!
推荐文章
- 获得PostgreSQL数据库中当前连接数的正确查询
- MySQL数据库表中的最大记录数
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- PHP/MySQL插入一行然后获取id
- 从现有模式生成表关系图(SQL Server)
- 我如何排序一个多维数组在PHP
- 如何在PHP中截断字符串最接近于一定数量的字符?
- PHP错误:“zip扩展名和unzip命令都没有,跳过。”
- Nginx提供下载。php文件,而不是执行它们
- HyperLogLog算法是如何工作的?
- Json_encode()转义正斜杠
- 数据库和模式的区别
- 如何在PHP中捕获cURL错误
- JavaScript:客户端验证与服务器端验证