当PHP应用程序建立数据库连接时,当然通常需要传递登录名和密码。如果我对我的应用程序使用一个最小权限的登录,那么PHP需要知道这个登录名和密码。保护密码的最好方法是什么?只在PHP代码中编写它似乎不是一个好主意。
当前回答
你的选择是有限的,因为你说你需要密码来访问数据库。一种常用的方法是将用户名和密码存储在单独的配置文件中,而不是主脚本中。然后确保将其存储在主web树之外。这是如果有一个web配置问题,让你的php文件只是显示为文本,而不是执行,你还没有暴露密码。
除此之外,你是在正确的行与最小的访问所使用的帐户。再加上
不要使用用户名/密码的组合 将数据库服务器配置为只接受来自该用户的web主机的连接(如果DB在同一台机器上,localhost更好),这样即使凭证暴露出来,它们对任何人都没有用处,除非他们有其他访问机器的权限。 混淆密码(即使是ROT13也可以),如果有人访问了文件,它不会提供太多的防御,但至少可以防止随意查看它。
彼得
其他回答
将它们存储在web根目录外的一个文件中。
如果你在别人的服务器上托管,在你的webroot之外没有访问权限,你可以把你的密码和/或数据库连接放在一个文件中,然后使用.htaccess锁定文件:
<files mypasswdfile>
order allow,deny
deny from all
</files>
这个解决方案是通用的,因为它对开放源代码和闭源应用程序都有用。
为应用程序创建一个操作系统用户。参见http://en.wikipedia.org/wiki/Principle_of_least_privilege 用密码为该用户创建一个(非会话)操作系统环境变量 作为该用户运行应用程序
优点:
您不会意外地将密码检入源代码控制,因为您不能这样做 您不会意外地搞砸文件权限。你可能会,但这不会影响这个。 只能由root或该用户读取。Root可以读取你所有的文件和加密密钥。 如果使用加密,如何安全地存储密钥? 作品x-platform 请确保不要将envvar传递给不受信任的子进程
这个方法是Heroku提出的,他很成功。
有些人把这个问题误解为如何在数据库中存储密码。这是错误的。它是关于如何存储密码,让您进入数据库。
通常的解决方案是将密码从源代码移到配置文件中。然后,将管理和保护配置文件的工作交给系统管理员。这样,开发人员就不需要知道任何关于产品密码的信息,并且在源代码控制中也没有密码记录。
如果你正在使用PostgreSQL,那么它在~/。Pgpass自动设置密码。有关更多信息,请参阅手册。
推荐文章
- 将表从一个数据库复制到另一个数据库的最简单方法?
- 主体、使用者和主体之间的意义和区别是什么?
- 什么是分片,为什么它很重要?
- 如何从一个查询插入多行使用雄辩/流利
- 数据库触发器是必要的吗?
- 在PHP单元测试执行期间,如何在CLI中输出?
- 在PHP中使用heredoc的优势是什么?
- PHP中的echo, print和print_r有什么区别?
- 为什么我应该使用基于文档的数据库而不是关系数据库?
- 哪个更快/最好?SELECT *或SELECT columnn1, colum2, column3等
- 将值从同一表中的一列复制到另一列
- 如何将XML转换成PHP数组?
- 什么是数据库池?
- 如何将对象转换为数组?
- 关于数据库,每个开发人员应该知道些什么?