2010-06-25 80 views
2

嘿,所以我试图做一个PHP图像上传表单。我已经能够成功解决这个问题,但只能通过将我上传到777的文件夹的权限,或读/写/执行。这对于大型的大型网页来说并不是一个好主意。我使用的是000webhost,显然它很糟糕,但它显然也是最好的免费虚拟主机。我相信我需要做的是以某种方式将任何运行PHP的用户(在000webhost上)添加到一个组中,然后将该组包含在读/写/执行权限中,但保留其他人的“读取”权限。但是,我不知道该怎么做。目前我只是通过Filezilla设置权限。我不知道用户在网络服务器上运行PHP,我不知道如何添加该用户以获得单独的组权限。另外,我想我想要一个类似的密码设置文件,只是没有其他人阅读,所以表单可以使用PHP来检查密码,然后再上传任何内容。 谢谢PHP权限处理

+1

要查看在服务器上运行php的用户,只需检查上载文件的所有者。在服务器上创建的文件将拥有创建它们的流程的所有者(用户/组)。 – 2010-06-25 07:27:32

+0

我想像所有者将Apache为上传的图像,如果您有ssh访问权限,您可以使用chown -R the_desired_owner:the_desired_group the_folder更改用户/组,否则我不认为如果您只使用该文件夹用于图片上传,不存储任何其他内容 – Luke 2010-06-25 07:42:50

回答

0

我不确定你的主机如何设置它们的东西,但是可以使用它的所有者的权限使用suPHP之类的东西来执行PHP脚本。这听起来不像你的主机这样做,在这种情况下,你不能真正阻止人们搞乱你的文件。文件系统安全性是共享主机的固有问题。如果可能,我会建议购买低端VPS(虚拟专用服务器)。

0

将父文件夹CHMOD改为0777,然后让PHP调用mkdir()创建文件夹。该文件夹的所有者将与PHP进程的所有者相同,您将能够move_uploaded_file()到该文件夹​​。

举例说明,假设您需要上传到文件夹/app/myapp/data/images。然后,先删除该文件夹,如果它存在,那么CHMOD /app/myapp/data/到0777最后写一个简单的PHP脚本mkdir('/app/myapp/data/images');

最后不要忘了父文件夹的权限重置为初始值;)

0

低最终的VPS对于你想要完成的事情来说并不是真的需要。

您遇到的最大问题是主机处理PHP(suPHP,DSO,CGI,mod_php)的方式。根据他们使用加载的方法,PHP处理器将取决于您的权限处理方式。

在这种情况下,似乎PHP只是在Apache中作为mod_php运行,而没有以用户(您自己)的身份运行进程。它只是作为“无人”运行。

您的主机允许这种情况发生的事实是高度不安全的,我非常建议找到另一个网络主机,它会尝试保护您的数据。

一旦你找到一个运行phpSuExec(suPHP)的新主机,你会注意到当涉及到权限时,事情可能会开始与你的脚本一起工作。但是,您将无法再使用777的chmod值。由于安全限制,您能够达到的最高价格是755。

1

当您允许Web服务器对您的系统进行写入访问时,您需要非常小心,尤其是您应该确保正在编写的文件夹不能用于上传脚本PHP。这里是你如何改善事项:

  1. 创建上传一个文件夹是Web根

  2. 之外这个文件夹添加为一个虚拟目录

  3. 创建丹尼斯访问所有的规则文件夹中的文件。然后添加一些允许访问特定类型的规则(假设为.gif,.png,.jpg)

  4. 在您的上传脚本中,验证文件的类型是否合适(例如图片)并且扩展名是适当。

仍然不能保证有人不会以某种方式上传一个流氓PHP脚本到这个文件夹,但你只需要尽可能多的安全措施。有一些Apache配置涉及到,所以你可能需要做一点挖掘。只是尽量确保最终不可能从您的文件夹中执行PHP。

-phil