如何保护包含数据库用户名和密码的配置文件

时间:2015-06-22 10:32:09

标签: php security

问题

为了将我的PHP代码与MySQL数据库连接,我使用PDO方式,创建变量,为其分配新的PDO对象,其中参数包含服务器,数据库,登录名和密码等设置。所以在结果代码中它看起来像这样:

$DAcess=new PDO("mysql:host=server;dbname=database","login","password");

我觉得将登录数据直接写入代码感觉不舒服,在发生这些数据可能发生更改的情况下,我也觉得它没有效果。建议我通过将这些数据存储在其他文本文件(最好是.INI文件)中来解决这个问题,我需要在任何时候从中检索它,例如,有文件:

xampp/htdoc/EXERCISE/secret/config.ini

问题是如果任何用户计算出该文件的位置和名称,他们可以通过在浏览器中输入URL / HTTP请求轻松访问它及其内容:

server(localhost)/EXERCISE/secret/config.ini

通过相同的来源向我建议该文件应该被这些协议禁止访问。所以我需要能够使用我的PHP代码访问该文件,但不允许任何用户自己访问目录/文件。怎么做?

可能的解决方案

我一直在漫游这些网页和其他类似的论坛,但我的所有研究结果都与关键词如"禁止"是关于无意中失去许可的用户。我一直在寻找Google解决方案,但我发现的教程是在我的XAMPP版本中引用位于其他位置的文件,并且是关于我的XAMPP版本中未包含在此文件中的设置行 - 考虑到我已经从官方页面下载了XAMPP,我应该有最新版本,因此那些教程已经过时了。

除了我自己的实验之外别无选择。过了一会儿,我找到了目录"禁止"目录" htdoc",已经玩过这些文件,最终看起来像是我的问题的解决方案。

具体来说,我复制了 .htacess (显然是带有扩展名的无名文本文件)并将其副本放入要禁止的目录中。我在文件中没有更改任何内容,但是引用了登录数据存储文件的行。我创建了自己的文本文件(无名,但扩展名为 .ldatastore ),其中使用复制的模式登录:密码我已经编写了我自己想要的登录数据并使 .htacess 使用此文件文件而不是原始 htdoc / forbidden / .htpassw

从那时起,它似乎有效。每当我尝试在新会话中使用我的浏览器访问这些文件(浏览器关闭并再次打开,否则它不需要再次识别)时,它不允许我浏览目录或查看其文件(这些都不是负责 .htacess 等行为或我自己创建的行为,例如 config.ini ,除非我提供与 .ldatastore 相同的有效登录数据文本文件。

那我为什么这么问呢?由于下面列出的几个原因,我觉得这样做很不舒服。如果这是唯一简单易行的解决方案,我可以忍受这种情况,但如果有更好的推荐方式,我会很乐意阅读,这就是我要求你提出建议的原因。我也写了这整篇文章来充分解释我的案例,提供足够的数据并表达"我已经做了一些研究和对案例的理解,然后再询问"所以这不是由这个标记为" off-topic"的页面的规则。

为什么我会选择其他解决方案

  1. 我觉得它依赖于XAMPP框架。整个模块使这项工作成为框架代码的一部分,而.htacess只是标记了该模块应该禁止的目录。这意味着我害怕如果我将使用他们自己的PHP执行软件在适当的付费服务器托管上发布我的项目,它将无法在任何地方工作,这只是XAMPP的方式。纠正我如果我错了,这是任何PHP执行者广泛使用的解决方案。

  2. 我试图理解模块的文档位于"禁止"中的文本文件。目录,但从文档看来,这个模块的开发主要是为了使一个安全和禁止的服务器存储秘密数据,然后由不同的服务器上的各种不同的应用程序访问,而不是仅仅禁止秘密目录(我会留下这个目录作为我的应用程序的一部分,是我的用法和作者假设使用之间的主要区别)。纠正我如果我错了,我误解了用法。

  3. 尽管我无法通过浏览器访问文件但没有登录数据,我的PHP代码似乎没有问题访问文件 - 我使用PHP代码从文本文件中检索应该被禁止的文本和它工作(它回应文本)没有任何问题的迹象。好吧,最后,我当然希望以这种方式工作,但我预计即使是检索文本的PHP代码也需要以某种方式包含登录数据才能访问。这种方式感觉就像任何人而不是在浏览器中输入引用会使自己的PHP代码从我的服务器访问这些文件(这将使这个行为增加安全无用的一点点)。纠正我如果我错了,这不容易。

  4. 我觉得这是一种不安全的解决方案。纠正我如果我错了,这是完全安全和优先的解决方案。

  5. 太长,没有阅读

    复制,粘贴和自定义.htacess文件是否安全到足以使我的PHP代码只能访问目录,以便从那里检索数据并且在大多数平台上都可以使用?

    我最近在右栏发现了类似的问题(How to secure database configuration file in project?),但我不确定它是否也可用于我的案例,以及如何使用。

1 个答案:

答案 0 :(得分:1)

正如@Darkbee所说,最简单的方法是将文件放在网站的根目录之外。这可以在服务器上访问,但在任何情况下都不能访问公众。

另一种方法是在文件上将权限设置为400。

.htaccess可以阻止访问,但不阻止访问服务器(需要访问权限)只是使用权限做一些简单的事情。