我应该在服务器上存储上传的文件?

时间:2013-04-02 19:11:27

标签: php

我正在学习php以及做一个涉及将文件上传到服务器的项目。我的目标是尽可能保证安全,所以你建议在哪里保存所有上传的文件。要上传的文件都是pdf文件。我在某个地方读到最好将上传的文件保存在文档根目录之外,而在其他一些地方我读过它并不容易从php访问文档根目录以外的文件,所以我很困惑。任何帮助克服这种情况的最佳实践表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:1)

我认为不在根路径中存储文件的原因理论上有人可以猜测导演,并访问文件,你可以学习(在服务器上)可能被证明非常困难的权限,或者你使用诸如NAS驱动器之类的东西(看起来好像它是网络的本地驱动器,但网络外没有人可以看到)然而这可能是昂贵的,并且是您需要学习的另一件事(配置NAS盒)。如果这两个不起作用,请尝试在服务器上使用单独的驱动器或将驱动器分区为两个驱动器。并在那里存储文件,至于它自己的代码,只需指定完整路径并像对待根驱动器上的任何其他文件一样对待它(这就是我如何做到但我不是PHP专业版)。如果您有任何其他问题可以随意提问,我希望我能为您解答这个问题:)

以下是分区驱动器的几种方法:

Vista / Windows server 2008(或大多数其他Windows服务器):http://blogs.technet.com/b/steve_lamb/archive/2008/07/08/how-to-re-partition-a-hard-disk-under-vista-or-server-2008-without-having-to-re-install.aspx

祝你好运!

答案 1 :(得分:1)

出于安全考虑,将上传暂时存储在文档根目录之外,直到它们被筛选出可执行代码或确保它们是您期望的内容并不是一个坏主意。这样,任何获得上传机制访问权限的人都无法通过您的界面上传后门,然后通过浏览器访问它(并接管您的服务器)。此外,他们无法上传导致您的网站执行其他操作的恶意代码。

一旦进行了筛选,为了让某人访问文件(查看PDF),最终需要将文件存储在文档根目录之上以获得良好的SEO。通过这种方式,它们可以被搜索引擎链接和挖掘信息,而不会对服务器造成负担。

有些人说你可以将它们存储在文档根目录下面,然后将它们作为附件显示给用户,然后通过fread传输给它们。问题是如果您使用的是大型文件,如果一次连接多个人或机器人,您可以从资源中运行您的特定服务器实例。

您也可以将它们直接存储在数据库中,但这不会在初始筛选之外提供额外的安全性。此外,实际从数据库中检索它们需要内存和开销,如果它们全部连接起来,搜索引擎可能会再次从资源中运行您的系统。