php文件上传到服务器

php文件上传到服务器

问题描述:

编写一个安全的文件上传从底部PHP脚本听起来像地狱对我来说。php文件上传到服务器

的基本规则,在没有特定的顺序上传文件:

1)创建一个新的文件,一些随机的,并给予命名

2新上传的文件)检查扩展

3)检查exif技巧

4)将所有上传的文件存储在web根目录下,并为该目录提供执行文件的权限。

5)确保文件上传功能是在上传该文件

6)检查文件大小

7)做了一些恶意软件扫描

8)PHP不执行代码限制文件大小

所以我想这就是很多:)

我还甚至已经开始编写脚本所有这一切,是因为我有3名巴sic问题。

1)是我的列表完成,如果有什么缺失,请说明其

2)是有某种形式的框架,可以做到这一切对我来说?一件简单的事情,不是一个可以做其他事情的大事。

3) 这是一个指导好吗? http://www.sitepoint.com/file-uploads-with-php/

我很想发布代码,但由于这个主题很大,我觉得最好问问大点。

在此先感谢。

+0

我不认为这是“巨大的”,当你将它转换为代码。然而,与其他人相比,#7有点复杂。 – Red

+0

我想不出任何你可能做的事情,这份清单非常详尽。 –

+0

@红叶你是对的;)感谢您的评论。 – Daniel

该文章中的“exif技巧”和其他措施来嗅探文件内容本身几乎没有用处。 (OK,值得检查上传的图像是预期的像素大小,但这是应用程序特定的,而不是安全问题。)

本文没有说明它试图用filetype sniffing来解决的威胁模型是什么,但通常要做的是防止跨站点脚本攻击,攻击者在该文件中包含一些活动内容。通常这是HTML中的文件,哪些浏览器(尤其是IE)嗅探并决定将其解释为HTML,尽管这不是文件的服务方式。不幸的是,检查文件是以PDF头文件开始,还是代表有效的GIF图像,这并不能帮助您,因为可以将“变色龙”文件同时解释为不同的文件类型。

通过使用特定的非HTML Content-TypeX-Content-Type: nosniff标头提供文件,可以在现代浏览器中阻止此攻击。然而,还有更多隐晦的攻击涉及将内容插入Flash或Java插件中,这些插件不受此标题的影响,并且对较旧的浏览器不具有防水功能。

阻止对上传文件进行XSS攻击的真正安全方法是简单地从不同的主机名(最好是不同的域名和IP地址,但简单的子域至少最有效)为它们提供服务。然后,您可以让攻击者XSS尽可能多地使用user-uploads-hosting网站,而不会对主网站产生负面影响。

病毒扫描不太可能证明对通用文件上传功能有用。如果您希望人们使用该站点交换Windows可执行文件,那么可以值得对传统恶意软件进行扫描,但对于一般情况,您通常关心的是对网站本身的攻击(服务器利用,XSS,浏览器漏洞利用)以及AV扫描仪无法检测到这类攻击。

创建一个新的随机文件名的步骤(1)比链接文章尝试执行的“清理”用户提供的文件名要好得多。它的“安全文件名”功能并不直接容易受到目录遍历的影响,但它仍然允许使用诸如..(单独),空字符串.htaccess以及会使Windows服务器混淆的文件名,如尾随点,reserved names和以上长名称。

你说得对,安全的文件上传比起初看起来要复杂得多,不幸的是,大多数教程代码(尤其是PHP)非常不幸。

+0

超级贴子:)我认为你说的是​​非常有趣的,我需要重新访问我的思想中心,然后我编码上传功能。我认为对我的问题理想的方法是使用某种框架,也许Zend会有一些我可以使用的幻想。对我来说,将图片上传到子域名似乎只会读取/写入权限是最好的解决方案。 – Daniel