我正在学习 php 以及做一个涉及将文件上传到服务器的项目。我的目标是使其尽可能安全,因此您建议将所有上传的文件保存在哪里。要上传的文件都是pdf文件。我在某处读到最好将上传的文件保存在文档根目录之外,而在其他地方我读到从 php 访问文档根目录之外的文件并不容易,所以我很困惑。感谢您对克服这种情况的最佳实践的任何帮助!谢谢!
2 回答
我相信不在根路径中存储文件的原因是理论上有人可以猜出导演并访问文件,您可以学习权限(在服务器上)这可能会非常困难,或者您使用诸如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-have-to-re-install.aspx
祝你好运!
出于安全目的,将上传文件临时存储在文档根目录之外并不是一个坏主意,直到它们被筛选出可执行代码或确保它们符合您的期望。这样,任何获得上传机制访问权限的人都无法通过您的界面上传后门,然后通过浏览器访问它(并接管您的服务器)。他们也无法上传导致您的网站执行其他操作的恶意代码。
一旦进行了筛选,为了让某人访问文件(查看 PDF),文件最终需要存储在文档根目录之上,以获得良好的 SEO。这样一来,搜索引擎就可以链接它们并从中挖掘信息,而无需对服务器征税。
有人说您可以将它们存储在文档根目录下,然后将它们作为附件呈现给用户,然后通过 fread 流式传输给他们。问题是,如果您使用的文件很大,如果同时连接了几个人或机器人,您的特定服务器实例可能会耗尽资源。
您也可以将它们直接流式存储在数据库中,但这在初始筛选之外没有提供任何额外的安全性。此外,从数据库中实际检索它们需要内存和开销,并且如果它们都同时连接,搜索引擎可能会再次耗尽您的系统资源。