我目前正在使用PHP上传一个文件上传sript,但我有点卡住了。用户可以上传PHP和JS等文件,但我不希望脚本在用户尝试下载时运行。是否有可能使用htaccess或其他方式阻止?导航到目录时忽略目录中的脚本文件?
回答
你可以写一个PHP包装将文件内容发送到浏览器的文件。但首先您必须确保您上传的文件存储在网络根目录以外的,以便任何人无法通过浏览器无意中或以其他方式访问它们。
的包装PHP脚本可以去的东西沿着这些路线:
<?php
$f = $_GET[ "f" ];
if (filename_is_ok($f) && is_file("../some_folder_outside_www/$f"))
{
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=$f");
header("Content-Length: " . filesize("../some_folder_outside_www/$f"));
readfile("../some_folder_outside_www/$f");
}
else
{
header("HTTP/1.0 404 Not Found");
echo "File not found (or you're not supposed to view this file)";
}
function filename_is_ok($f)
{
// You'll have to implement it yourself
return false;
}
// example calls:
// http://website.com/download.php?f=test.php
// http://website.com/download.php?f=test.js
?>
您可以更改上传的文件扩展名,如
my-file.php.txt
my-file.js.txt
假设.txt文件鸵鸟政策得到由PHP的服务器上处理...
Aaaah,好主意。有什么聪明的方法来检查文件是否包含纯文本?像.php或.js文件一样?因为我不需要重命名诸如.txt或.jpg等所有扩展名。 – qwerty 2010-05-21 14:23:11
我不知道是否有真正可靠的方法,但是您可以很容易地看到您的Web服务器将以PHP的形式处理什么扩展,因此这些扩展和例如.js应该足够了。 – jeroen 2010-05-21 14:35:16
那么这也不是一个好主意,因为除PHP之外还有其他可以运行的脚本。所以如果用户上传一个JS脚本,它将运行。另一种方法是获取上传的文件exstention,然后将其与一个scriptfile-exstentions列表进行比较,如果匹配,则将“.txt”添加到文件名中?然而,我有问题找到一份清单。 – qwerty 2010-05-21 14:44:37
- 1. bash脚本中的主目录导航
- 2. 将Jaggery项目导出为Deployable Archive时忽略文件/目录
- 3. 忽略文件中的目录
- 4. 不忽略子目录中的文件?
- 5. ant脚本删除svn:忽略的目录和文件
- 6. 跟踪文件中忽略目录
- 7. 在Git中忽略目录中的文件而不是目录本身
- 8. bash脚本来同步目录,但忽略某些文件
- 9. 忽略os.walk()中的目录?
- 10. 忽略eclipse中的目录
- 11. 忽略SVN中的目录
- 12. 的Git忽略目录下的所有文件,但不目录
- 13. CVS忽略目录
- 14. Htaccess忽略目录
- 15. .htaccess忽略目录
- 16. 忽略git目录
- 17. 列出目录,忽略子目录ANT
- 18. Excel VBA中忽略目录
- 19. Subversion忽略某些目录和文件
- 20. accessExternalDTD属性忽略目录文件
- 21. GIT:忽略某些目录,但不忽略其他目录
- 22. 用于移动目录/文件的Python脚本,而忽略使用shutil的某些目录/文件?
- 23. 忽略子目录的.gitignore
- 24. GIT:如何将所有本地忽略的文件导出到其他目录?
- 25. 忽略Meteor JS项目目录中的文件
- 26. Bash脚本:复制目录到外部驱动器 - 如何导航目录?
- 27. 将文件添加到忽略的目录中的Git
- 28. 导航到父目录
- 29. WebRequestMethods.Ftp导航到目录
- 30. 脚本遍历目录和子目录到列表文件
[目录禁用PHP(包括所有子目录)用的.htaccess]的可能重复(http://stackoverflow.com/questions/1271899 /禁用-php-in-directory-including-all-sub-directories-with-htaccess) – 2010-05-21 14:31:30
那么,PHP是唯一一个我现在不得不担心的脚本语言吗? – qwerty 2010-05-21 14:46:01
对不起,我应该把这个链接作为评论。虽然PHP是您提到的唯一服务器端脚本。 – 2010-05-21 14:50:29