2014-06-13 63 views
0

我有一种情况,我想保护一个文件免受公共访问,但启用从PHP读写。该文件包含密码等敏感信息。保护web根目录下的文件,但给php php访问

的问题是,

  • 我不能把Web根目录以外的文件(服务器安全限制从PHP访问)
  • 我想避免mysql数据库。

此外,我会尽量避免.htacess文件。

所以,如果我做一个文件夹,说private,在Web根目录,并做

chmod 700 private 

然后,如果要保护的文件是private/data,我做

chmod 700 private/file 

将这个是一个安全的设置?因此,现在我可以从php读取和写入文件,但公众无法访问它?

这是一个安全的设置?

+0

如果这就像一个配置文件,你不应该允许从PHP写入它。这就是你在临时文件或数据库中存储的某种东西,它已经过清理。 – VikingBlooded

+2

我强烈建议您将此文件放在webroot之外。如果因为其他安全措施而无法离开webroot,则需要打人,因为这实际上使您的应用程序无法安全。 – Halcyon

回答

2

PHP以与web服务器相同的用户身份运行,因此如果PHP可以读取它,那么您的web服务器也可以(反之亦然)。

如果您不想使用.htaccess还有另一个诀窍:将文件另存为.php文件。即使有人从网上访问文件,他们也无法看到源文件,他们可能只是得到一个白页,或者可能错误取决于文件中的确切内容。

+0

感谢您的回答,但是您是否可以不用'curl'下载'.php'文件,或者'curl'在另一个用户下运行? –

+0

如果你通过网络服务器访问文件,它会给你输出,而不是源。 – Halcyon

1

如果您正在运行suPHP或fastCGI php,您可以使用类似于您所描述的设置来限制对文件的访问。否则,PHP将使用与Web服务器相同的用户,并且PHP可以访问的任何文件也可以通过url访问。

+0

感谢您的答案..但我不知道我明白这个文件可以通过URL访问..这意味着在实践中,在webroot中的任何文件权限被忽略?因此,webroot中的所有文件都可以被任何人忽略文件权限? –

+0

不管文件权限用于Web服务器进程运行的任何用户的上下文中。在典型的PHP设置中,php用户与Web服务器用户相同。因此,如果文件可以访问php,它也可以访问Web服务器 - 这意味着您可以通过其相对于Web根目录的路径访问该文件。 –

1

如果想要保持规定的限制(这很奇怪),并且(我猜)你不希望/有权访问apache配置指令,可以考虑将PHP添加到某个组中,并且只给予组的权限文件,即。 apache无法读取(如果它不在root/wheel中)。

或者使其成为一个有效的.php文件(所以只有在php文件被请求时才会调用)当php调用时不会返回任何内容或重定向。或者只是密码。

+0

谢谢,听起来像个好主意。那么现在我怎么知道php会属于一个给定的组? –