因此我希望用户能够运行“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)!!