如何允许PHP在不影响服务器安全性的情况下写入文件

时间:2012-02-13 13:52:54

标签: php apache permissions fwrite file-ownership

每当我想让PHP脚本将输出写入服务器上的文件时,我经常会遇到负面评论。

我使用fopen()fwrite()fclose()函数。

我知道如何实现这一目标的唯一方法是将输出文件的权限设置为0666,或者将其设置为“nobody”(这是PHP在我们的Apache Web服务器上运行的用户)。< / p>

因此,如果“0666”或“无人拥有”是安全风险,那么如何成功安全地允许PHP脚本写入文件?

感谢您就此主题分享指南。

2 个答案:

答案 0 :(得分:3)

如果您需要在上传文件后从PHP访问这些文件,则需要使用允许Web服务器(在本例中为apache)访问它们的权限进行存储。人们所说的风险是,您网站上的某些脚本可能会被愚弄为提供文件。这是一个假设的风险,但是许多内容管理系统已经出现过风险。为了降低这种风险:

  1. 不容易猜出文件名和路径。如果用户有getfile.php?file=1.txt的路径,他们可以很容易地推断出还有2.txt。隐藏名称或使其无序。
  2. 使任何提供文件的脚本确认诸如登录用户,资源授权等内容,并从包含路径的文件名中删除任何内容,以避免对/etc/passwd等进行流氓引用。
  3. 如果您只需要关闭文件并且从不提供服务或再次通过PHP访问它,您还有更多选择。使用chmodchown命令使apache用户无法读取。如果你想要更加偏执,请让cron脚本将文件(并重命名)移动到PHP源中未知的位置。至少如果您的服务器被黑客攻击,入侵者无法直接进入目录,但我们正在讨论转向操作系统安全的问题。

答案 1 :(得分:-1)

如果可写目录位于外部可访问的区域,则存在风险。然后那些拥有合适工具并且知道如何将任何他们想要的内容写入该目录...或文件。然后,他们可以在其中放置恶意软件或在您的网站上创建网上诱骗方案。

他们真的可以做各种各样的事情来妥协你。我已经在自己的服务器上看到了这个,并且找不到合适的解决方案。