2012-09-17 63 views
0

我需要实现一个安全的PHP文件上传脚本。目前使用什么方法来确保您的脚本安全?最新安全PHP图像上传

我将白名单允许的扩展名,并确保Apache作为用户运行,以避免默认情况下需要777权限。

上传的文件将是图片,我有MySQL访问权限。用户需要在上传后才能看到他们的文件。

谢谢!

+2

白名单扩展坦率地说是一个虚拟的安全系统。有人将'nastyvirus.exe'重命名为'cutekittens.jpg'是微不足道的。改变apache的uid也相当无用。正确实施的下载脚本不会关心实际用户是谁 - 它只会通过一些外部的所有权分配方式将用户限制到他们的文件,例如,一个数据库。 –

+0

@MarcB,+1。始终,始终检查MIME类型。 – wesside

+0

只需将图像上传到临时目录,然后从图像目录中上传的图像中复制/调整新版本的图像并清空温度 – max

回答

1

对于某些人建议避免恶意文件上传,请参阅Ways to stop people from uploading GIFs with injections in them?的答案。

另一个重要的事情是避免SQL注入。任何可以被攻击者修改的数据(cookie,用户代理,查询字符串,POST数据(包括上传的文件名),头文件,动态路径名等)不应该先通过mysql_real_escape_stringMySQLi equivalent。如果是整数,则使用intval()函数。

+0

嗨。 SQL注入不应该是太多的问题,因为只有文件名将通过PDO和准备好的语句记录在数据库中。感谢您的链接! –

0

按照您所说的检查文件扩展名,但要验证上传的文件是否具有正确的扩展名,实际上就是它所说的,请尝试running it through imagemagick using the verify command。这是一个简单的解决方案,它似乎是保证影像没有任何疑问的极少数方法之一。

此外,使用PHP功能is_uploaded_file添加额外的安全级别。

希望不言而喻,但PDO应该用于PHP各方面的数据库事务。

最后,请记住,如果您使用JavaScript进行任何验证,那么它可以轻松被半胜任的Web用户覆盖。客户端验证对用户更具响应性,但始终通过适当的服务器端检查进行备份。