0

私は現在、リモートサーバー(B)がローカルサーバー(A)にphpインクルードで影響を与えることを許可しようとしています。小さなテストとして、サーバーBからのファイルを含むphpファイルをサーバーAに配置し、php.ini経由でURLを含めることを許可し、ユーザーエージェントを変更しました。

サーバーBのファイルには、サーバーAで作成されるはずの小さなテストファイルを作成するためのコードが含まれています。問題は、サーバーAのインクルードを実行するたびに、サーバーAでファイルを作成したいのに、サーバーBでファイルが作成されることです。 。

サーバーAのコード:

include("http://www.XXXXXXXXX.com/Test.php");

サーバーBのコード:

   $ourFileName = "testFile.txt";
   $ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
   fclose($ourFileHandle);
4

2 に答える 2

0

サーバーBで、.htaccessファイルに次の行を配置します。

AddType text/plain .php

サーバーBが出力するコードをサーバーAが読み取る必要があります。現在、サーバーAでコードが処理されています。

これにより、コードが一般に公開されます。また、そのディレクトリで他のPHPが実行されるのを防ぎます。ディレクティブを使用して、<Files>特定のファイルにのみ適用することができますが、常に一般に公開されます。PHPとの両方で、そこへのアクセスを制限する方法があります.htaccess

それを望まない場合は、それを行う方法もありますが、もう少し複雑です。

リクエストに応答するように編集サーバーBでPHPを実行し、ファイルを選択的に含める場合は、次のようなコンテンツを含む
新しいファイルを作成することをお勧めします。includer.php

<?php
if ('my-secret-key' == $_GET['auth']) {
    if (is_readable($_GET['file'])) {
        header('Content-type: text/plain');
        echo file_get_contents($_GET['file']);
    } else {
        header('Status: 404 Not found');
        header('Content-type: text/plain');
        die('<?php /* File not found */ ?>');
    }
} else {
    header('Status: 403 Forbidden');
    header('Content-type: text/plain');
    die('You do not have permission to access this page.');
}

そして、サーバーAで:

include ('http://example.com/includer.php?auth=my-secret-key&file=Test.php');

可能であれば、サーバーBでの使用も検討して、セキュリティを向上させbasename()、パラメーターを設定する必要があります。$_GET['file']hash()auth

于 2011-06-06T03:53:46.710 に答える
0

あなたがしていることによって引き起こされる複数のセキュリティ問題があります。phpは非常に柔軟性があり、そのようなことを行うように構成できますが、私はあなたがそれを行う方法をお勧めしません。

サーバー'a'にリモートホスト'b'にファイルを作成させる方法は他にもあります。

個人的には、比較的安全な方法でリモートタスクを実行するssh関数がとても好きです。

于 2011-06-06T04:01:57.187 に答える