1

これが状況です。

PHP を使用してリモート Web サーバー上のファイルにアクセスできる必要があるプライマリ Web サーバーがあります。リモートサーバーもあります。リモート サーバー上のファイルは非公開です。つまり、プライマリ サーバー上の PHP スクリプトを介してのみアクセスしたいということです。

プライマリ サーバーからファイルのディレクトリへのアクセスのみを許可し、それ以外のアクセスを拒否するにはどうすればよいですか?

4

1 に答える 1

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 ヘッダーを設定します。

その後、彼らはあなたのアクセス トークンでしかファイルにアクセスできなくなります。トークンを動的にして簡単に盗まれないようにするには、salt の MD5 ハッシュに加えて、サーバー間で共有できる動的変数 (日付など) を使用できます。動的変数が頻繁に更新されるほど、アクセス トークンが頻繁に更新され、より安全になります。最適な保護のために、salt とハッシュ アルゴリズムに使用しているものを秘密にしておくようにしてください。

ファイル サーバーに保持できる基本的なスクリプト:

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行われるはずですが、他のサーバーからのフェッチに遅延が発生し、常にfalseになるため、お勧めしません。

于 2011-09-24T00:00:13.987 に答える