You are here

Drupal专业开发指南 第20章 文件上传

g089h515r806 的头像
Submitted by g089h515r806 on 星期四, 2009-08-27 13:23

如果一个启用的模块允许文件上传,那么文件就应该放到一个特定的目录下,并通过代码来强制访问。

如果启用了文件上传,并在Administer >>Site configuration >> File system中选择了私有下载方法,那么该页面的文件系统路径必须位于web根目录以外。换句话说,如果强迫在特定应用的文件用户权限与web根目录保持一致,会恰得其反的。
文件上传的最大危险就是,如果有人能够上传一个可执行的文件,那么该文件就可以用来获取你服务器上的更多权限。Drupal从两方面对这一点进行了保护。首先,会向文件系统路径声明的目录写入.htaccess文件:
 
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
Options None
Options +FollowSymLinks
 
指令SetHandler告诉Apache,这个目录下面的任何可执行文件,应有处理器Drupal_Security_Do_Not_Remove_See_SA_2006_006(实际并不存在)进行处理。这样,该处理器九覆写了由Apache定义的任意处理器,比如
 
AddHandler application/x-httpd-php .php
 
Drupal的上传模块还为多个扩展名的文件实现了重命名。这样,evilfile.php.txt经过上传就变成了evilfile.php_.txt。更多详细可参看http://drupal.org/node/65409http://drupal.org/node/66763
 
注意 前面的方案是针对Apache的。如果你的Drupal使用的是不同的web服务器,那么你应该清楚,如何解决用户可能上传可执行文件这一安全问题。
 老葛的Drupal培训班 Think in Drupal

Drupal版本: