Apache htaccess .phps?

Apache htaccess .phps?

因此我希望用户能够运行“foo.phps”来编写“foo.php”脚本以显示该文件的源代码。

我只想在一个目录中执行此操作(因为这存在安全风险)。我可以使用 .htaccess 吗?

我在目录中添加了一个 .htaccess 文件并在其中写入以下内容:

AddType application/x-httpd-php-source .phps

然后重新启动了 Apache,但我无法将“s”添加到文件以获取源代码。我是否也需要对 PHP 做些什么?

答案1

来自php 文档,你需要使用SetHandler

<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

答案2

如果您想知道是否可以在 .htaccess 中使用指令,您可以随时查阅文档。对于 Apache 2.0,请参阅:

http://httpd.apache.org/docs/2.0/mod/mod_mime.html#addtype

Description: Maps the given filename extensions onto the specified content type
Syntax:      AddType MIME-type extension [extension] ...
Context:     server config, virtual host, directory, .htaccess
Override:    FileInfo
Status:      Base
Module:      mod_mime

特别要看一下“上下文:”部分。

在这个特定情况下,是的,你可以。你只需要确保允许覆盖该特定目录上的 FileInfo:

例如

<Directory /path/to/my/site>
    AllowOverride FileInfo
</Directory>

您还需要确保文件存在。如果您有一个名为 test.php 的文件,您不能只是神奇地请求 test.phps

为了解决这个问题,您可以使用 mod_rewrite 强制使用处理程序。例如,mod_rewrite 文档中的此规则是更改 mod_rewrite 中的处理程序的一个很好的例子

RewriteEngine On
RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]

或者您可以创建一个符号链接,但您需要手动为每个文件(或编写脚本)和新文件执行此操作。

ln -s test.php test.phps

答案3

解决这个问题的一种方法是,你需要一个额外的脚本,它只是输出指定文件的源代码。然后你可以编写一个重写规则来重写

  • foo.phps

进入

  • 显示我源.php?输入=foo.php

其中一个主要问题是安全性。请确保您只能输出所需的文件,而不是任何文件(例如 /etc/passwd)!!

相关内容