gpt4 book ai didi

mysql - 正确的PHP文件上传权限

转载 作者:行者123 更新时间:2023-11-29 09:17:27 25 4
gpt4 key购买 nike

我已经开发了一个下载/上传管理器脚本。

当我通过POST方法上传文件时,该文件存储在名为files的文件夹中,files文件夹位于另一个名为download-manager的文件夹中。

现在看来,当我通过POST方法上传时,我想重命名,删除文件时可以使用0666 CHMOD,但是要使其正常工作,download-manager文件夹和files文件夹需要为0777 CHMOD。现在有人可以告诉我这是否危险?

1)我拒绝所有.htaccess文件,因此没有人可以通过浏览器访问文件目录

2)上载脚本受用户名和密码保护,使用该脚本的人将明显更改,因此只有管理员才能基本上载,重命名,编辑,删除MySQL数据库中的文件和记录。

上载文件时,一条记录会添加到数据库中,并提供诸如文件类型,文件名,文件大小等信息,然后将唯一ID(由MySQL自动递增)附加到process.php文件中,该文件将从目录中获取文件和未显示的mime类型等,process.php基本上会进行检查以查看记录和文件是否存在,如果存在则强制下载该文件。

基本上,下载URL类似于:wwww.mydomain.com/process.php?file=57,显然要进行检查以确保ID存在于数据库中,并且存在一个文件名与该文件名一起存储在数据库中的文件。 ID。

现在,当使用POST方法通过表单上传文件时,所有这些方法都可以正常工作,但我还添加了手动上传功能,因此对于想要上传大于其网络主机大小的文件的用户,他们可以简单地通过FTP程序上传文件例如,然后只需通过管理区域中的表单手动添加文件名和文件详细信息即可将记录与文件链接。问题是权限问题,因为如果文件是通过FTP上传的,或者他们通过php脚本上传文件的方式无法重命名,则将来需要时可以删除文件,因为php脚本没有正确的权限。因此,根据我的收集,唯一的选择就是告诉使用脚本的人将文件chmod更改为0777,以使其正常工作,我认为这样会使它正常工作吗?

但是然后我还有0777也可以执行的问题。该脚本允许任何文件类型的上传,因为它是一个下载/上传管理器脚本,但是与此同时,我对所有这些权限困扰以及我应该实际执行的操作感到有些困惑。由于php受主机设置的最大上传大小限制,因此我想添加手动上传,因此用户可以通过另一种方法上传文件并将文件分配给数据库记录,但是如上所述,要重命名,删除时遇到问题通过php脚本文件。

我已经开发了脚本来检测此类问题并通知用户等,但我想尝试使此脚本完成所有工作或几乎所有工作,而无需在手册中指出管理员必须chmod文件到0777时,他们希望脚本重命名,然后删除文件,尽管我不知道将chmodding文件到0777是否实际上允许将php脚本重命名,删除等,但是安全性也是一个问题。

更新

好的,谢谢,在将文件切入上载之前对文件进行了整理?

我是否只在文件周围使用chown(),而没有其他任何东西,它将使它由服务器进程拥有并使其私有?如我所见


chown apache:apache '/path/to/files' ;


我是否需要添加apache:apache位?

我确实认为这是一个更简单的解决方案,如果管理员进行手动上传告诉他们他们将来必须根据需要手动重命名/删除文件,因为脚本没有正确的权限,那么这样做使其成为一个简单的解决方案,因为manualupload脚本可以仅重命名db记录以使其保持与文件的链接。这样就不用担心文件权限问题。

只需将用户通过ftp手动将文件更改(例如,从myfile.zip更改为somefile.zip),然后他们编辑该文件的db记录,然后将文件名从旧文件名myfile.zip更改为somefile.zip,这样就可以链接所有文件,但不用担心权限问题。正如我一直在阅读的那样,chown()并不总是有效,或者由于任何原因都不能被依赖。

最佳答案

1)我拒绝所有.htaccess文件,因此没有人可以通过浏览器访问文件目录


将文件存储在一个单独的文件夹中,该目录应远离包含PHP文件的目录结构。

就目录的权限而言,有三种方法可以设置文件夹的权限:


使其可写(chmod 0777 '/path/to/files/'

不建议这样做,因为它对安全性有重大影响,尤其是在非专用服务器上。具有帐户或可以告诉服务器上的进程将其写入/删除到该文件夹​​的任何人都可以更改其内容。
设为临时(chmod 1777 '/path/to/files/'

这也带来了安全方面的问题,但由于以下原因,它的影响要小于选项1:用户无法修改目录-只能修改其拥有的文件。
使它归服务器进程所有并使其私有(chown apache:apache '/path/to/files' ; chmod 0700 '/path/to/files'

可以说这是最好的解决方案。

关于mysql - 正确的PHP文件上传权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3642241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com