php - 如何允许 PHP 在不损害服务器安全的情况下写入文件

标签 php apache permissions fwrite file-ownership

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

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

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

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

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

最佳答案

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

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

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

关于php - 如何允许 PHP 在不损害服务器安全的情况下写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9261707/

相关文章:

php - 分析 Apache/PHP 核心转储

PHP-将 $_POST 保存到 $_SESSION 问题

apache - 我可以设置 Apache Web 服务器提供的 PDF 文件的 "HTML"标题吗

php - 跨站点参数达到最大 URL 限制的解决方法

azure-devops - Azure Pipelines + Repos Rest API : Permissions for creating a Pull Request via API using System. AccessToken

php - Codeigniter 数据库错误

php - .htaccess 错误文档重定向

bash - 羊群权限被拒绝 bash

python - DRF get_permissions 似乎无法正常工作

php - 局域网内访问php、mysql站点