這是情況。遠程服務器上的文件保護
我有一個主要的Web服務器,需要能夠訪問遠程Web服務器上的文件與PHP。我也有一個遠程服務器。遠程服務器上的文件是私人的。也就是說,我只想通過主服務器上的PHP腳本訪問它們。
如何僅允許訪問主服務器中的文件目錄,但拒絕訪問其他人?
這是情況。遠程服務器上的文件保護
我有一個主要的Web服務器,需要能夠訪問遠程Web服務器上的文件與PHP。我也有一個遠程服務器。遠程服務器上的文件是私人的。也就是說,我只想通過主服務器上的PHP腳本訪問它們。
如何僅允許訪問主服務器中的文件目錄,但拒絕訪問其他人?
在.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
,因爲從其他服務器提取將會有一個延遲,它總是錯誤的。
我其實已經考慮過了,但我不確定那實際上會有多好。問題是我們沒有自己的知識產權。 – guywhoneedsahand
也就是說,PRIMARY服務器沒有。 – guywhoneedsahand
這聽起來很有趣 - 你能給更多的信息,或鏈接到教程?我不清楚這將如何專門工作。 – guywhoneedsahand