我刚刚与一个同事讨论过。 我的index.php包含我的mysql连接,因此还包含主机,用户名,密码和数据库名称。 他声称这是一个安全线程,因为php解析器可能会失败,导致web服务器以纯文本形式返回整个文件。 但我相信如果php解析器失败,网络服务器会给用户带来内部服务器错误。
任何人都可以确认它是否存在安全隐患?
谢谢。答案 0 :(得分:3)
简短的回答是否定的。
答案很长,但仅限于:
此外,如果您使用某种版本控制软件,请确保无法从Web浏览器查看.hg或.svn或任何文件夹。你经常会感到惊讶。
编辑:
我倾向于在这里提出一些建议,这就是我在日常工作中所做的工作。在web根文件夹之外有一个config.php文件,并将其包含在index.php中。这样你肯定知道它永远不会被看见。顺便说一句,我已经用PHP开发了很多年,并且从未让解析器失败,导致原始PHP显示给最终用户。
编辑2:
如果你的同事在谈到PHP解析器“失败”时指的是解析错误,那么在实时环境中你应该禁用错误报告。
答案 1 :(得分:1)
任何一种结果都是可能的。正常的操作过程是使用require
引入包含数据库凭据的单独文件。该文件应位于Web服务器文件树之外,因此无法通过浏览器访问该文件。
答案 2 :(得分:0)
我相信你永远不会太安全。什么更容易,如果黑客获取您的数据库信息,替换数千甚至数百万条记录,您必须向您的用户(可能还有他们的律师根据内容和违规行为)解释安全漏洞,或者将您的数据库信息放在单独的密码中受保护的文件夹,包括您需要连接的页面上的信息?
对我而言,选择很简单。
答案 3 :(得分:0)
您的同事是正确的,但这种情况不太可能发生。如果PHP已停止在主机上运行,.php文件将仅以纯文本或下载形式返回。
为了更安全,请在新文件夹中使用数据库凭据的include()路径。在该文件夹中有一个.htaccess文件,其中包含'deny from all'。
这样即使PHP停止在服务器上运行,Apache仍然会运行并保护所有文件,包括数据库凭据。如果即使apache停止运行,整个网络服务器也将无法访问,您的凭据仍然是安全的。
:)
答案 4 :(得分:0)
我个人将选项放在Web树外的配置文件中,一旦上传,就从该目录中删除FTP访问。问题不在于PHP解析器是否失败并将文件作为纯文本丢弃,但如果FTP服务器的漏洞受到损害,则FTP和HTTP都可以访问该文件。
只要Apache / PHP作为FTP的单独用户运行,您仍然可以require
来自PHP的配置文件。