好吧,這裏是我的回答 - 這是真的,最好的答案是「沒有'。但是圖像/ js/css在開發過程中比較重要(在實時公開之前)以及客戶端預覽指示我們不能執行基於IP的apache規則。因此,(,稍作修改,從上面)的規則是
RewriteEngine On
# Exclude the public and error directories from authentication
RewriteRule ^(public|error)($|/) - [L]
# Perform authentication via php
RewriteCond %{REQUEST_FILENAME} !auth.php
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* auth.php?requested_file=$0 [QSA,L]
(因爲我需要幾個子目錄,其中內容確實是公開的,寫着:在登錄頁上使用的圖片/ CSS/JS)
和相關的PHP如下;對於
if($authenticated){
if($extension == 'php'){
call_user_func(function(){
$file_name = func_get_arg(0);
$path = getcwd();
chdir(pathinfo($file_name,PATHINFO_DIRNAME));
return include($file_name);
chdir($path);
}, $file_name);
} else {
//set cache headers so the browsers don't have to refresh all the
// static content
header_remove('X-Powered-By');
header_remove('Transfer-Encoding');
header_remove('Cache-Control');
header_remove('Pragma');
header_remove('Expires');
//header('Expires:');
header('Content-type: '.$mime_type);
readfile($file_name);
}
}
這樣做是執行使用call_user_func()
停止命名空間污染,include()
執行PHP PHP和chdir()
以確保腳本得到正確的當前工作目錄。
這是'容易'的一部分;內容頭文件和MIME類型必須被「猜到」(我用finfo來表示MIME類型,但它在2013年有一個bug,這隻會加劇這個問題),但即使是apache也不能100%正確地做到這一點...
然後刪除圖像的緩存控制頭,否則你不僅可以經常PHP頁面,以及...
我只想說;你只需要,如果你有厚厚的管道和很多你並不需要的CPU週期來做到這一點...
來源
2013-07-19 13:35:42
lol
最好的答案是:**不」做。 **開放訪問css/js文件,保護php文件,使用'拒絕所有'來保護子目錄。很多流行的WordPress博客都可以打開'/ wp_admin/*'([example](http://www.gizmodo.co.uk/wp-login.php?redirect_to=http%3A%2F%2Fwww.gizmodo)。 co.uk%2Fwp-admin%2F&reauth = 1)),只要在你的php文件中沒有安全問題,它確實沒關係 – Peter
爲什麼當未經授權的人會看到任何圖像,樣式表或JavaScript文件?其中是否有敏感數據? – Gumbo
@彼得Szymkowski謝謝你的答案。並且感謝你使用'deny from all'的想法,如果有必要的話,我認爲它可以和'allow from IP'一起使用。 – acoder