在请求中提供额外的头[使用JavaScript],然后写一些代码在.htaccess文件来检查头部存在
你可以得到阿帕奇检查这个(秘密)标题,并在内部将请求重写为viewAsSource.php
类型的文件,然后读取REQUEST_URI
(或传递的查询字符串参数)并返回文件源。类似于@LucasKrupinski的建议,除了你不需要在PHP文件中包含任何东西。
例如,在根.htaccess
文件:
RewriteEngine On
# Block direct access to any file in the /tools directory
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^tools/ - [F]
# Display PHP source...
RewriteCond %{HTTP:X-Action} ^display-source$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.+\.php)$ tools/display-source.php?url=$1 [L]
对于所有.php
请求此检查具有“显示源”的值的X-Action
HTTP请求报头和所请求的文件是否存在。如果满足这些条件,则将该请求内部写入/tools/display-source.php
脚本,并在url
参数中传递URL。您可以改为检查超全局,但请注意,这还包括在请求上传递的任何查询字符串。
然后,在display-source.php
,是这样的:
<?php
$url = isset($_GET['url']) ? $_GET['url'] : null;
if (isset($url)) {
$file = $_SERVER['DOCUMENT_ROOT].'/'.$url;
// Validate $file....
// :
highlight_file($file);
}
看一看[mod_rewrite的(https://httpd.apache.org/docs/current/mod/mod_rewrite.html)。您可以将请求重写为一些sendource.php脚本。 –
为什么不决定服务器端哪些文件未分析的输出应该是一个选项,而不是让客户端选择要分析的服务器的文件?这样,您可以更加确定敏感数据不会泄漏。 –
@LucasKrupinski所有文件都应该可以解析,并且最好默认。对于某些目录中的文件,我希望发送源代码作为选项。 – tjespe