在請求中提供額外的頭[使用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