通过浏览器访问php文件中的数据库详细信息是否存在安全风险?

时间:2012-03-27 10:56:42

标签: php security

我刚刚与一个同事讨论过。 我的index.php包含我的mysql连接,因此还包含主机,用户名,密码和数据库名称。 他声称这是一个安全线程,因为php解析器可能会失败,导致web服务器以纯文本形式返回整个文件。 但我相信如果php解析器失败,网络服务器会给用户带来内部服务器错误。

任何人都可以确认它是否存在安全隐患?

谢谢。

5 个答案:

答案 0 :(得分:3)

简短的回答是否定的。

答案很长,但仅限于:

  1. 您的服务器遭到入侵,在这种情况下,人们阅读您的php文件是您最不担心的事情
  2. 您错误配置了服务器以解析.php文件和纯文本,这确实非常愚蠢。
  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的配置文件。