2

SERVER_A に fileA.php があり、SERVER_B に fileB.php があります。

fileB.php は fileA.php にそのコンテンツの curl リクエストを行います

fileA.php は、リクエストが特に fileB.php から来ていることをどのように判断できますか?

--

fileB.php の $_SERVER['SCRIPT_NAME'] を fileA.php に送信することを考えていましたが、誰かが fileB.php または一般的なファイルにアクセスして $_SERVER['SCRIPT_NAME'] = 'fileB.php を実行できるためです。 '; それは実際にはそれほど安全ではありません。

では、セキュリティ上の理由から、要求が別のサーバー上の特定のファイルからのものであることをどのように判断できますか?

4

7 に答える 7

4

確実にできません。HTTP ヘッダーを設定して、反対側で検証することができます。それは誰にでもできるというわけではありませんが、ほとんどのものより優れています。

于 2010-02-21T05:23:13.877 に答える
2

あなたの声明のために不可能です:

"since someone can go into fileB.php"
于 2010-04-15T08:41:03.930 に答える
2

秘密のトークンを設定して、受信側で検証してみませんか?

// fileB.php

$url = "http://example.com/fileA.php"
     . "?from=fileB"
     . "&token=" . sha1('fileB' . 'myaw3som3_salt!')
;
// then make the cURL request.


// fileA.php
if (sha1($_GET['from'] . 'myaw3som3_salt!') != $_GET['token']) {
    die();
}

これは単純化された例ですが、アイデアは理解できます。

于 2010-04-15T08:49:11.627 に答える
0

サーバーの外部でリクエストすると、実際には制御できなくなります。他のサーバーのファイル A が中間者ファイル B の可能性がある場合は、セキュリティ モデルを再考する必要があります。具体的な状況は?

于 2010-02-21T05:22:02.600 に答える
0

nickf は的を射ていたと思いますが、彼の答えを少し拡張するために、次のようにします。

  • Server1 の fileB.php が Server2 の fileC.php を要求する
  • Server2 の fileC.php は、ランダムに生成されたソルトを返し、タイムスタンプとともにファイルまたはデータベースに保存します
  • Server1 の fileB.php は Server2 の fileA.php を要求し、事前に構成されたキーをハッシュして送信し、ランダムなソルトを追加して再度ハッシュします (例: sha1(sha1('mypassword') . $salt))。
  • fileA.php は、過去 60 秒間にソルトが生成されたかどうかをチェックし、生成されていない場合はエラーを返します。
  • fileA.php は、最後のランダムなソルトと事前構成されたキー (sha1(sha1('mypassword') . $salt)) を使用して同じハッシュを再度実行し、fileB.php によって送信された要求本文と比較されます。それらが一致する場合、fileA.php は fileB.php へのアクセスを許可します。
  • fileA.php は、生成された最後のソルトを削除します。
于 2010-06-12T01:55:35.513 に答える
0

1つの方法は、

$_SERVER['HTTP_REFERER']

PHP の変数ですが、これを入力するのはブラウザーの決定であるため、完全に信頼することはできません。

于 2010-02-21T05:23:04.690 に答える