每当我想让 PHP 脚本将输出写入服务器上的文件时,我经常会遇到负面评论。
我使用了 fopen()
、fwrite()
和 fclose()
函数。
我知道如何做到这一点的唯一方法是将输出文件的权限设置为 0666 或将其归“nobody”所有(即在我们的 Apache Web 服务器上运行 PHP 的用户)。
那么,如果“0666”或“无人拥有”存在安全风险,您如何成功且安全地允许 PHP 脚本写入文件?
感谢您分享有关此主题的指导。
最佳答案
如果您需要在文件上传后从 PHP 访问这些文件,则需要使用允许 Web 服务器(在本例中为 apache)访问它们的权限来存储它们。人们所说的风险是您网站上的某些脚本可能会被愚弄以提供文件。这是一种假设的风险,但许多内容管理系统都发生过这种风险。为了减轻这种风险:
- 使文件名和路径不易被猜到。如果用户有一个到
getfile.php?file=1.txt
的路径,他们可以很容易地推断出还有一个2.txt
。加密名称或使其无序。 - 让任何提供文件的脚本确认登录用户、资源授权等内容,并从包含路径的文件名中删除任何内容,以避免对
/etc/passwd
的恶意引用,以及之类的。
如果您只需要删除文件,不再提供它或再次通过 PHP 访问它,您还有更多选择。使用 chmod
或 chown
命令使其对 apache 用户不可读。如果您想更加偏执,可以使用 cron 脚本将文件(并重命名)移动到 PHP 源代码中未知的位置。至少,如果您的服务器被黑客入侵,入侵者将无法直接进入该目录,但我们正在接近讨论转向操作系统安全性的地步。
关于php - 如何允许 PHP 在不损害服务器安全的情况下写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9261707/