如何设置才能安全地上传媒体文件到服务器

2016-11-16 · 🙈Ray · 0条 · 343次

注:该文使用的目录实例是WordPress中的目录。

正如我们将要讨论的,通过给服务器设置合适的文件权限来保护您的站点是很重要的。对于像/uploads, /upgrade, /backups这类需要被服务器可写,以达到上传、更新、备份的目录来说是很棘手的。

一方面,出于安全考虑,你希望给予最大的限制权限,大多数情况下默认或推荐的目录设置恰好可以达到这样的效果。另一方面,如果目录权限受限太大,类似媒体上传这样的事情就会无法实现。

但是我们可以同时实现这两项:坚实地保障可写目录的安全,同时为上传、更新、备份等操作提供合适的文件操作权限。在这篇文章中,你将学会如何使用.htaccess来保证目录安全。

使用.htaccess来保证目录安全

在我研究服务器日志得出的经验中,WordPress的/uploads目录被恶意脚本程序死死盯着。不幸的是,很多服务器配置需要777权限来保证媒体上传这类事件的正常进行。当然,这并不是一个好的方法,因此我们可以通过.htaccess来锁定这些脆弱易被攻击的目录。

这种技术方法通过使用.htaccess文件,但是更好的方法是通过Apache的主配置文件(httpd.conf)。如果你没有对配置文件的访问权限或者更喜欢通过.htaccess文件来实现,那么请遵循下面介绍的方法。

第一步:在/uploads文件夹下创建一个.htaccess文件(如果已经存在,请使用当前文件)。在该文件中放置如下代码,并上传至服务器。

# secure uploads directory
<Files ~ ".*\..*">
    Order Allow,Deny
    Deny from all
</Files>
<FilesMatch "\.(jpg|jpeg|jpe|gif|png|tif|tiff)$">
    Order Deny,Allow
    Allow from all
</FilesMatch>

这些代码仅允许对特殊类型的图片访问,禁止对其他文件的访问。如果你要使用诸如.zip, .mp3, .mov或者其他类型的媒体文件,仅需像如下一样编辑FilesMatch模式:

同样,你可以移除任何你不是用的媒体类型。这是在/uploads, /backup这类目录中实现这种技术方法的关键。一旦设置完成,就会阻止黑客注入PHP或者其他脚本,防止受到恶意攻击,仅仅允许图片或者其他制定类型的文件。

其他可以尝试的事情

如果你想要实现媒体上传但是不想设置为777权限,下面给出一些其他的、间接性的方法:

  1. 渐增地增大权限,直到希望的事情可以工作。
  2. 取消PHP安全模式
  3. 取消自组织年/月选项
  4. 使用不同的文件路径
  5. 如果可以的话转换主机

我已经在不同的服务器环境中体验了这些方法,但是有的好使有些不好使。有些可选的解决方案并不像其他的一样安全,所以如果你受到777的困扰,使用.htaccess方法会很好地帮助你提高/uploads目录的安全性,来抵挡恶意脚本和其他恶意行为。

如果你喜欢像该文中提及的.htaccess技术,可以看看原文作者的新书—— .htaccess made easy

原文地址:How to Setup Secure Media Uploads


  0