5

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

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

我知道如何做到这一点的唯一方法是将输出文件的权限设置为 0666 或将其归“nobody”所有(这是 PHP 在我们的 Apache Web 服务器上运行的用户)。

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

感谢您分享有关此主题的指导。

4

2 回答 2

3

如果您需要在上传文件后从 PHP 访问文件,则需要使用允许 Web 服务器(在本例中为 apache)访问它们的权限来存储它们。人们所说的风险是您网站上的某些脚本可能会被欺骗以提供文件。这是一种假设性风险,但许多内容管理系统都发生过这种风险。为了减轻这种风险:

  1. 使文件名和路径不易被猜到。如果用户有路径,getfile.php?file=1.txt他们可以很容易地推断出也有路径2.txt。加密名称或使其不排序。
  2. 让任何提供文件的脚本确认登录用户、对资源的授权等内容,并从包含路径的文件名中删除任何内容,以避免恶意引用/etc/passwd等。

如果您只需要删除文件并且不再提供它或再次通过 PHP 访问它,那么您还有更多选择。使用chmodorchown命令使其对 apache 用户不可读。如果您想更加偏执,请使用 cron 脚本将文件移动(并重命名)到 PHP 源代码中未知的位置。至少那时如果您的服务器被黑客入侵,入侵者就无法直接进入目录,但我们正朝着讨论转向操作系统安全性的方向前进。

于 2012-02-13T14:20:10.723 回答
-1

风险在于,如果该可写目录驻留在外部世界可访问的区域中。然后那些拥有正确工具并知道如何将他们想要的任何内容写入该目录......或文件的人。然后,他们可以在其中放置恶意软件或在您的网站上创建网络钓鱼方案。

真的,他们可以做各种各样的事情来妥协你。我已经在我自己的服务器上看到了这一点,但还没有真正找到正确的解决方案。

于 2017-03-12T19:24:03.090 回答