[英]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-Type
和X-Content-Type: nosniff
标头,可以在现代浏览器中阻止此攻击。 但是,还有更多晦涩的攻击,涉及使内容进入不受此标头影响的Flash或Java插件中,并且与较旧的浏览器也不是水密的。
阻止对已上传文件的XSS攻击的真正安全方法只是从不同的主机名提供服务(理想情况下,使用不同的域名和IP地址,但简单的子域至少最有效)。 然后,您可以让攻击者XSS尽可能多地向用户上传托管站点,而不会对您的主站点造成负面影响。
病毒扫描不太可能证明对通用文件上传功能有用。 如果您期望人们使用该站点交换Windows可执行文件,那么值得对它们进行扫描以查找传统恶意软件,但是对于一般情况,您通常会担心针对网站本身的攻击-服务器利用,XSS,浏览器利用- AV扫描程序无法检测到此类攻击。
您创建新的随机文件名的步骤(1)是一种比链接文章尝试的“清理”用户提供的文件名更好的方法。 它的“安全文件名”功能不易受到目录遍历的影响,但仍允许诸如..
(单独使用),空字符串, .htaccess
和会混淆Windows服务器的文件名之类的奇怪字符(如尾随点), 保留名称和超长名称。
没错,安全文件上传比最初看起来要难得多,并且不幸的是,那里的大多数教程代码(尤其是PHP)都是灾难性的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.