繁体   English   中英

php文件上传到服务器

[英]php file upload to the server

从底部开始编写一个安全的文件上传PHP脚本,对我来说听起来像地狱。

不按特定顺序上传文件的基本规则:

1)创建一个随机的新文件,并为新上传的文件指定名称

2)检查扩展名

3)检查exif技巧

4)将所有上载的文件存储在Web根目录之外,并且不授予该目录执行文件的权限。

5)确保文件上传功能是PHP,在上传文件时不执行代码

6)检查文件大小

7)做一些恶意软件扫描

8)限制文件大小

所以我在想很多

我什至没有开始为所有这些编写脚本,因为我有3个基本问题。

1)我的清单是否完整,如果缺少什么,请说明

2)是否有某种可以为我做所有这些事情的框架? 简单的东西,不是可以做很多其他事情的大东西。

3)这对指导有用吗? http://www.sitepoint.com/file-uploads-with-php/

我很想发布代码,但是由于这个主题很大,因此我觉得最好提出更大的建议。

提前致谢。

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

这篇文章没有说威胁模型试图用文件类型嗅探来解决,但是通常试图做的是防止跨站点脚本攻击,攻击者在文件中包含一些活动内容。 通常,这与文件中的HTML一起使用,浏览器(尤其是IE)会嗅探并决定将其解释为HTML,即使这不是文件的提供方式。 不幸的是,检查文件是否以PDF标头开头或表示有效的GIF图像在这里无济于事,因为可以制作“变色龙”文件,这些文件可以同时解释为不同的文件类型。

通过为文件提供特定的非HTML Content-TypeX-Content-Type: nosniff标头,可以在现代浏览器中阻止此攻击。 但是,还有更多晦涩的攻击,涉及使内容进入不受此标头影响的Flash或Java插件中,并且与较旧的浏览器也不是水密的。

阻止对已上传文件的XSS攻击的真正安全方法只是从不同的主机名提供服务(理想情况下,使用不同的域名和IP地址,但简单的子域至少最有效)。 然后,您可以让攻击者XSS尽可能多地向用户上传托管站点,而不会对您的主站点造成负面影响。

病毒扫描不太可能证明对通用文件上传功能有用。 如果您期望人们使用该站点交换Windows可执行文件,那么值得对它们进行扫描以查找传统恶意软件,但是对于一般情况,您通常会担心针对网站本身的攻击-服务器利用,XSS,浏览器利用- AV扫描程序无法检测到此类攻击。

您创建新的随机文件名的步骤(1)是一种比链接文章尝试的“清理”用户提供的文件名更好的方法。 它的“安全文件名”功能不易受到目录遍历的影响,但仍允许诸如.. (单独使用),空字符串, .htaccess和会混淆Windows服务器的文件名之类的奇怪字符(如尾随点), 保留名称和超长名称。

没错,安全文件上传比最初看起来要难得多,并且不幸的是,那里的大多数教程代码(尤其是PHP)都是灾难性的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM