当PHP应用程序建立数据库连接时,当然通常需要传递登录名和密码。如果我对我的应用程序使用一个最小权限的登录,那么PHP需要知道这个登录名和密码。保护密码的最好方法是什么?只在PHP代码中编写它似乎不是一个好主意。
当前回答
将它们存储在web根目录外的一个文件中。
其他回答
一个额外的技巧是使用一个PHP单独的配置文件,如下所示:
<?php exit() ?>
[...]
Plain text data including password
这并不妨碍您正确地设置访问规则。但如果你的网站被黑客攻击,“要求”或“包括”将在第一行退出脚本,因此更难获得数据。
然而,不要让配置文件在可以通过web访问的目录中。你应该有一个“Web”文件夹,包含你的控制器代码,css,图片和js。这是所有。其他的都放在脱机文件夹中。
将它们存储在web根目录外的一个文件中。
如果你在别人的服务器上托管,在你的webroot之外没有访问权限,你可以把你的密码和/或数据库连接放在一个文件中,然后使用.htaccess锁定文件:
<files mypasswdfile>
order allow,deny
deny from all
</files>
最好的办法是根本不存储密码! 例如,如果您在Windows系统上,并连接到SQL Server,则可以使用集成身份验证来使用当前进程的标识连接到数据库,而不需要密码。
如果您确实需要使用密码连接,首先对其进行加密,使用强加密(例如使用AES-256,然后保护加密密钥,或使用非对称加密并让操作系统保护证书),然后将其存储在具有强acl的配置文件中(在web目录之外)。
你的选择是有限的,因为你说你需要密码来访问数据库。一种常用的方法是将用户名和密码存储在单独的配置文件中,而不是主脚本中。然后确保将其存储在主web树之外。这是如果有一个web配置问题,让你的php文件只是显示为文本,而不是执行,你还没有暴露密码。
除此之外,你是在正确的行与最小的访问所使用的帐户。再加上
不要使用用户名/密码的组合 将数据库服务器配置为只接受来自该用户的web主机的连接(如果DB在同一台机器上,localhost更好),这样即使凭证暴露出来,它们对任何人都没有用处,除非他们有其他访问机器的权限。 混淆密码(即使是ROT13也可以),如果有人访问了文件,它不会提供太多的防御,但至少可以防止随意查看它。
彼得
推荐文章
- 获得PostgreSQL数据库中当前连接数的正确查询
- MySQL数据库表中的最大记录数
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- PHP/MySQL插入一行然后获取id
- 从现有模式生成表关系图(SQL Server)
- 我如何排序一个多维数组在PHP
- 如何在PHP中截断字符串最接近于一定数量的字符?
- PHP错误:“zip扩展名和unzip命令都没有,跳过。”
- Nginx提供下载。php文件,而不是执行它们
- HyperLogLog算法是如何工作的?
- Json_encode()转义正斜杠
- 数据库和模式的区别
- 如何在PHP中捕获cURL错误
- JavaScript:客户端验证与服务器端验证