首页 > 解决方案 > 尽管在 .htaccess 中使用了“ForceType image/jpeg”,但 PHP 文件仍在执行

问题描述

为了防止任何 PHP 文件在上传到我的图像目录时执行,我创建了一个.htaccess仅包含 的文件ForceType image/jpeg,放置在此目录中。

虽然这成功导致evil.txt在浏览器打开时被解释为图像文件,但evil.php执行得很好(它将文本回显到浏览器)。我什至尝试过直接针对它:

<FilesMatch "evil.php">
    ForceType image/jpeg
</FilesMatch>

但这也不起作用。

标签: phpapache.htaccess

解决方案


这是完全不相关的两件事。ForceType用于客户端,而不是 Web 服务器。解释 PHP 的是你的 apache httpd web 服务器。它知道是否将文件解释为 PHP 的方式取决于您的FilesMatch指令,其中包含 aSetHandler让 httpd 知道让这些文件转到mod_php. 这两件事是完全不相关的。

换句话说,您可能正在(非常聪明地)认为您正在做的事情将使您的 apache httpd 配置更加安全。我向你保证,你不是。在该配置方案中,不以结尾的文件.php不会通过 php。而且由于您可以控制在您的 webroot 中命名哪些文件,所以这不应该是一个问题。只是不允许用户控制服务器上文件的命名。就是这么简单


推荐阅读