Php 为什么将MySQL凭据放在www目录之外?

Php 为什么将MySQL凭据放在www目录之外?,php,mysql,security,credentials,Php,Mysql,Security,Credentials,可能重复: 我一直在读到,将MySQL连接凭据(无论是类、定义等)放在web根目录(www文件夹上方)之外是一种最佳实践 为什么会这样?如果凭据位于.php文件中,那么是否可以通过浏览器访问该文件并不重要,对吗?因为在某种程度上,web根目录下没有任何内容是安全的。它可以在互联网上使用,这使得它本身就不安全 总有一种可能,配置错误的服务器可能有一天会输出任何PHP文件的内容,而不是将其发送到PHP进行解释。也有太多的人试图以任何方式进入你的数据库。。。有些只是为了好玩 在任何给定的情况下,都应

可能重复:

我一直在读到,将MySQL连接凭据(无论是类、定义等)放在web根目录(www文件夹上方)之外是一种最佳实践


为什么会这样?如果凭据位于.php文件中,那么是否可以通过浏览器访问该文件并不重要,对吗?

因为在某种程度上,web根目录下没有任何内容是安全的。它可以在互联网上使用,这使得它本身就不安全

总有一种可能,配置错误的服务器可能有一天会输出任何PHP文件的内容,而不是将其发送到PHP进行解释。也有太多的人试图以任何方式进入你的数据库。。。有些只是为了好玩

在任何给定的情况下,都应该始终使用可用的最安全的方法。养成这个好习惯

此外,您应该永远不要在web应用程序中使用root密码。创建具有最低权限的特殊用户

对于PHP,我总是使用
.ini
文件来存储敏感配置

<?php
    $config = parse_ini_file('../config.ini');
?>


因为
www
目录(即您网站的根目录)中的内容可以从internet访问

这意味着,如果你把你的凭据放在这里,也许有人可以访问它们,并直接连接到你的数据库


将您的凭据置于此目录之外可确保无法通过这种方式访问它。

这是一种预防措施。如果有人意外地禁用了apache服务器中的php评估,或者更改了.htaccess文件中的apache设置,则该文件可以像任何纯文本文件一样提供。或者,如果您不小心忘记了一个php开始标记,它将像纯文本一样重新编写。并不是说你会犯这样一个愚蠢的错误,但也许未来的新手在编写你的代码时可能会犯错误


既然你能阻止一个可能的向量成为可能,为什么还要让它保持开放状态呢?只需听从那些射中自己脚的人的建议(或者像我一样,射中了两只脚和一只手)并将凭据移到docroot之外。

直到web服务器配置错误并意外地为PHP源代码提供服务而不是对其进行解释。您是出于个人喜好使用ini文件,还是有特定原因?ini文件在启动时由PHP加载,并且在整个系统生命周期内保留信息这个过程。此外,这也是个人的喜好。由于.ini文件是PHP的本机文件(想想JavaScript和JSON),因此它们对于配置选项很有意义。