Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全的PHP文件上传_Php_Apache_.htaccess_Security_File Upload - Fatal编程技术网

安全的PHP文件上传

安全的PHP文件上传,php,apache,.htaccess,security,file-upload,Php,Apache,.htaccess,Security,File Upload,我正在尝试在我们的新网站上开发一个文件上传模块,允许您将任何文件上传到我们的服务器。上载的文件将上载到/files,其中包含以下.htaccess以防止用户执行.php文件: <Files *.*> ForceType applicaton/octet-stream </Files> ForceType应用程序/八位组流 这会触发浏览器下载窗口(至少在FF和Safari中是这样),但是否可以安全地假设该文件不会使用此方法在服务器上运行?如果没有,您将如何实施这样的解

我正在尝试在我们的新网站上开发一个文件上传模块,允许您将任何文件上传到我们的服务器。上载的文件将上载到
/files
,其中包含以下.htaccess以防止用户执行.php文件:

<Files *.*>
ForceType applicaton/octet-stream
</Files>

ForceType应用程序/八位组流

这会触发浏览器下载窗口(至少在FF和Safari中是这样),但是否可以安全地假设该文件不会使用此方法在服务器上运行?如果没有,您将如何实施这样的解决方案

我认为最安全的做法是限制对目录的100%web访问,并使用类似于
download.php
的脚本,通过该脚本传递文件id,然后获取相应的文件并将其输出到浏览器。但是,我很确定你所拥有的一切都会起作用并且是安全的。

我想你实际上想要的是:

<Directory /path/to/files>
    SetHandler default-handler
</Directory>

SetHandler默认处理程序

您所拥有的可能在实践中起作用,因为默认情况下,服务器配置为不执行任何操作,除非明确要求这样做,但它并不能真正保证不会执行任何操作
ForceType
只是为静态文件设置内容类型(我不确定,但我怀疑它是否会影响可执行脚本)。

我同意Paolo的观点,他的方法更安全。总有人利用你的PHP文件执行上传的文件的问题。坏例子:

include_once("/modules/".$_GET["module"].".php");

如果有人通过
module=../Files/exploit
附议Paolo的答案,请将文件目录移出可访问路径。然后可以使用PEAR的模块编写download.php脚本来提供文件

使用此方法假定文件不会在服务器上运行是否安全

有点,但这取决于配置中有哪些其他指令;也许还有其他规则允许PHP文件运行。如果启用PHP的唯一方法是在文件类型上键入PHP处理程序,那么应该停止PHP的执行

然而,停止PHP执行只是您担心的问题之一。如果人们上传包含活动内容的文件,如HTML或Flash — 即使文件类型说它是一个无辜的图像 — 他们可以通过跨站点脚本(XSS)控制站点上其他用户的会话。有关这方面的一些讨论,请参阅


“download.php”界面使用内容配置始终触发下载框,并将文件存储在非用户提供的文件名(如“1234.dat”)下,更安全。

为了获得最大的安全性,您可以将包含上载文件的文件夹从一个单独的分区挂载,该分区没有exec标志。

当内容处置:附件触发所有常用浏览器上的下载时,Opera、Safari、Konquer仍将在网站上下文中打开该文件夹,因此该文件可以访问会话cookie。