2011-08-14 34 views

回答

3

您可以輕鬆地將.htaccess文件放入要阻止的文件夾中。這個.htaccess的內容是deny from all。那麼你的網絡服務器將不會提供這些頁面,但你仍然可以通過fopenfile_get_contents等訪問它們。

+0

是的,但它仍然返回一個XML文件錯誤?爲什麼是這樣? '警告:DOMDocument :: load()[domdocument.load]' –

+0

@Pete你使用的是相對url嗎?您不能使用絕對(http)網址,否則它將通過Apache獲取 – Paulpro

+0

是的,我現在已經更改了大多數網址。但我的iframe和一些圖片仍然無法加載。任何想法爲什麼不呢? –

0

不需要爲此使用htaccess:只需使用點開始文件名,並且apache默認會自動忽略它。我使用這個技巧來隱藏php代碼的整個目錄。

+0

我認爲這不是apache功能。可能是你的系統管理員設置了一些指令,所以Apache不提供點前綴的目錄和文件。 – Timur

+0

那麼,我自己管理我的所有機器,並且我可以說在ubuntu/debian/redhat上,全新的apache安裝不會提供點文件。在我看過的至少3個共享主機上(godaddy,1and1和dreamhost),同樣的事情也適用。我會看看apache的文檔,但只要我使用apache(最近十年左右),它從未提供dotfile或dot目錄的內容。 – Femi

+0

嗯...可能是我錯了... – Timur

0

例如在Vbulletin中,我使用一個簡單的.htaccess來保護includes文件夾不具有config.php可讀性。你可以做一個.htaccess文件在你想用下面保護的目錄:

<Files *.php> 
order deny,allow 
deny from all 
</Files> 

不知道如果通配符的作品,在我來說,我使用

<Files config.php> 
order deny,allow 
deny from all 
</Files> 

祝您好運!

0

好問題有很多相對簡單的事情你可以做。

例如,您可以在公用目錄下存儲文本文件。

公共目錄會是這樣的:

/home/site_folder/public_html/ 

低於公衆會是這樣的:

/home/site_folder/key/ 

例如一個名爲「key.ini」存儲下面公衆副鑰匙夾內容如下:

[key] 
name="enter a name here" 
text="enter random text here" 

這個你可以撥打電話:

$ini_file = "path_to_file/key.ini"; // i.e. /home/site_folder/key/key.ini 
$ini_array = parse_ini_file($ini_file); 
$name = $ini_array['name']; 
$text = $ini_array['text']; 

但是後來.ini文件不是文本。如果您的文本文件低於公開,則通過與上面的ini文件相同的方式進行讀取將是安全的,並且您可以很容易地讀取它,假設「password.txt」文件如下所示:

$fh = fopen(password.txt,'r'); 
$password = fread($fh,100); 
fclose($fh); 

如果你想確保你可以使用一個簡單的異步方法,如這對數據同時使用上面的密鑰的key.ini文件加密文件的內容:

function getAesKey() { 
    if (file_exists(key.ini)) { 
     $args = parse_ini_file(key.ini); 
     if (isset($args['name']) AND isset($args['text'])) { 
      return md5($args['name'].$args['text']); 
     } 
    } 
} 

function encrypt_data($data) { 
    //AES256 symetric encryption 
    $key = getAesKey(); 
    if(32 !== strlen($key)) $key = hash('SHA256', $key, true); 
    $padding = 16 - (strlen($data) % 16); 
    $data .= str_repeat(chr($padding), $padding); 
    return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, str_repeat("\0", 16)); 
} 

注意,一旦文件被創建,你可能希望改變它的許可ns只讀。

因此,像這樣將創建該文件並添加加密內容:

$fh = fopen(password.txt, "w"); //Open for writing 
    fwrite($fh, encrypt_data("My very secure password")); 
    fclose($fp); 

功能以解密內容:

function decrypt_data($data) { 
$key = getAesKey(); 
if(32 !== strlen($key)) $key = hash('SHA256', $key, true); 
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, str_repeat("\0", 16)); 
$padding = ord($data[strlen($data) - 1]); 
return substr($data, 0, -$padding); 
} 

你可以添加一個進一步的函數返回的實際內容而不是每次寫出所有代碼:

function getPassword() { 
$fh = fopen(password.txt, 'r'); 
$password = fread($fh,100); 
fclose($fh); 
return decrypt_data($password); 
} 

其中意味着你這樣稱呼它:

$password = getPassword(); 

密碼文件的內容,如果它被訪問,將是這個樣子:

v?��cr���bV��@ 

下面公開的文件,沒有人會是能夠導航到文件,如:www.yoursite.com/text_file.txt來查看它。如果他們以某種方式訪問​​您的服務器並找到密碼文件:他們將無法在沒有密鑰的情況下解密加密的內容。但他們可能會用你的功能輸出內容。

我通常有我的加密類文件和key.ini在其中一個include目錄中,因此在當前託管帳戶路徑中不可用。要訪問這個,你需要對服務器進行root訪問。這樣,如果有人擁有所有代碼的副本,他們將無法在沒有密鑰文件的情況下解鎖文件。

相關問題