2011-09-23 52 views
1

這是情況。遠程服務器上的文件保護

我有一個主要的Web服務器,需要能夠訪問遠程Web服務器上的文件與PHP。我也有一個遠程服務器。遠程服務器上的文件是私人的。也就是說,我只想通過主服務器上的PHP腳本訪問它們。

如何僅允許訪問主服務器中的文件目錄,但拒絕訪問其他人?

回答

4

在.htaccess文件:

AuthName "Protected" 
AuthType Basic 
<Limit GET POST> 
order deny,allow 
deny from all 
allow from YOUR.SERVER.IP.ADDRESS 
</Limit> 

這就是我會做。將該文件放置在您嘗試保護的目錄中的.htaccess文件中。只有來自YOUR.SERVER.IP.ADDRESS的請求(顯然會更改爲您的服務器IP)將被允許,其他人都會收到403錯誤。

鑑於您的意見,那麼你會想用某種方式使用權限令牌或其他東西。我設置它的方式是在遠程文件服務器上創建一個PHP腳本,該腳本將在訪問令牌匹配時提供文件,然後您可以使用cURL獲取文件。如果訪問令牌不匹配,請設置403 Forbidden頭。

然後,他們只能使用您的訪問令牌訪問文件。爲了令令牌動態化,以便它不容易被竊取,可以採用鹽的MD5散列加上可以在服務器之間共享的動態變量,如每月的某天。動態變量更新頻率越高,訪問令牌更新的頻率越高,並且安全性越高。儘量保持你使用鹽和哈希算法的祕密,以獲得最佳保護。

Basic腳本,你可以保留在文件服務器上:

if($_GET['access'] != md5('aihdhgsa8gas8gasgsa8asgdds' . $YOUR_UPDATING_VALUE)){ 
    //Improper access hash 
    header('HTTP/1.1 403 Forbidden'); 
    die(); 
} 

$files = array('blah.png', 'lol.exe'); 
$file_to_serve = $_GET['file']; 
if(!in_array($file_to_serve, $files)){ 
    //File isn't in our array 
    header('HTTP/1.1 403 Forbidden'); 
    die(); 
}else{ 
    die(file_get_contents($file_to_serve)); //Serve however you need. 
} 

和你的主服務器上:

$file = file_get_contents('http://example.com/serve.php?file=' . $filename . '&access=' . md5('aihdhgsa8gas8gasgsa8asgdds' . $YOUR_UPDATING_VALUE)); 

這些都是非常粗略的例子,你需要返工的服務和打水到你的系統配置,但你明白了。 $YOUR_UPDATING_VALUE應該是兩個服務器可以計算更新有點頻繁,我建議不要microtime,因爲從其他服務器提取將會有一個延遲,它總是錯誤的。

+0

我其實已經考慮過了,但我不確定那實際上會有多好。問題是我們沒有自己的知識產權。 – guywhoneedsahand

+0

也就是說,PRIMARY服務器沒有。 – guywhoneedsahand

+0

這聽起來很有趣 - 你能給更多的信息,或鏈接到教程?我不清楚這將如何專門工作。 – guywhoneedsahand