Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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_File Upload - Fatal编程技术网

如何在不可能执行的情况下处理.php文件的上载?

如何在不可能执行的情况下处理.php文件的上载?,php,file-upload,Php,File Upload,我希望允许我的用户将.php文件上载到服务器,但也希望确保这些文件对我的应用程序无害 有什么建议吗 谢谢。不要执行它们,这就足够了 确保您的应用程序在任何时候都不会运行或包含用户上载的文件(例如,通过使用GET参数来include包含没有任何文件) 另外,请确保上载的文件不能通过.php扩展名从外部访问 在一个正常的、半正确编码的工作流中,上载的.php文件不构成安全风险,无论它们包含什么代码。选项1:使用不同的文件名存储它们,并将原始文件名作为元数据的一部分存储,例如存储在数据库表中 选项2:

我希望允许我的用户将
.php
文件上载到服务器,但也希望确保这些文件对我的应用程序无害

有什么建议吗


谢谢。

不要执行它们,这就足够了

确保您的应用程序在任何时候都不会运行或包含用户上载的文件(例如,通过使用GET参数来
include
包含没有任何文件)

另外,请确保上载的文件不能通过
.php
扩展名从外部访问


在一个正常的、半正确编码的工作流中,上载的.php文件不构成安全风险,无论它们包含什么代码。

选项1:使用不同的文件名存储它们,并将原始文件名作为元数据的一部分存储,例如存储在数据库表中

选项2:禁用上载目录上的脚本执行


选项3:将它们重命名为.phps(可接受的原始PHP显示扩展)

我建议使用“在上传目录中禁用脚本执行”的方法。这是唯一完全安全的解决方案

只需将此规则添加到uploads目录中的
.htaccess
文件:

php_value engine off
有两种解决方案:

  • 将它们重命名为.phps
  • 在Web服务器配置中禁用上载目录中的PHP执行

将上载目录分开,只写,不在互联网上可见(这将阻止他们在上载后访问自己的脚本)


然后,您可以调整新脚本,并按照您认为合适的方式执行。

是的。我从我的答案中删除了这一段,其实没有必要强调这一点。+1这是一个很好的解决方案,但它只会保护通过web服务器发出的请求,而不会保护通过包含的内部执行(但这是一个非常小的风险)。这是不言而喻的!运行一个应用程序来执行用户上传的代码,而没有任何卫生设施,这当然是一个坏主意。当然,你是对的。你也可以将mime类型更改为
text/plain
或类似的类型。