使用.htaccess将两个文件列入白名单以便执行

时间:2012-10-26 11:58:19

标签: apache .htaccess

我的网站上有图片文件夹。

我有两个问题:

  1. 我想禁用该目录中的所有脚本执行(即没有PHP / Perl / Python) 什么。)
  2. 我的images文件夹中有两个php文件,名为gradient.php和rgba.php - 我按照惯例执行那些运行。
  3. 如何设置.htaccess文件来执行此操作。此外,不是在images目录中放置一个新的.htaccess,是否可以将这些指令合并到站点根目录中?

1 个答案:

答案 0 :(得分:3)

您可以将这些规则添加到站点根目录中的htaccess文件中:

# check if the request is for the images folder
RewriteCond %{REQUEST_URI} ^/images/

# check that it isn't a request for an image
RewriteCond %{REQUEST_URI} !\.(jpe?g|png|gif|bmp)$ [NC]

# check that it isn't a request for the 2 ok php files
RewriteCond %{REQUEST_URI} !^/images/(gradient|rgba)\.php$

# forbid access
RewriteRule ^ - [L,F]

这应该使/images/的任何请求不以jpg / jpeg / png / gif / bmp(或者你想要添加到正则表达式的任何其他扩展名)结尾,或者不是{ {1}}或gradient.php会导致403被禁止。


编辑:

  

我不希望它们被禁止,我只是希望它们不被执行 - 它是一个上传文件夹,所以我基本上想要它,如果有人上传了一个我没有检测到的秘密PHP代码的JPG,那个它不会运行

只要将jpg和其他图像映射到正确的mime / type(通过rgba.php),它就不会被传递给php处理程序,无论代码是什么都不会被执行。如果要使用默认处理程序提供所有文件,则需要在images目录的htaccess文件中设置AddType image/jpeg .jpg。然后,您需要将渐变和rgba文件移动到其他目录。您无法从htaccess文件中有选择地设置处理程序,但您可以使用AddHandler default-handler php块在vhost配置中设置处理程序。


编辑2:

我错了,您可以使用<Location>标志使用规则设置自定义处理程序。因此,在上述规则中,您可以执行H代替[L,F],以便任何非图像或[L,H=default-handler]gradient.php的内容都会被发送到默认值 - 处理程序(例如,php文件将按原样发送,而不是由mod_php处理和执行)。

所以你可以这样做:

rgba.php