-1

すべてのphp関数を備えたdomain.com/php/があるとします。次に、domain.com/frontend/のフロントエンド開発者とftpアカウントを共有します。これで、フロントエンドは作業を行い、「../php/」を呼び出すことができます" 機能。私のphpコードが保護されていると仮定しても安全ですか? または、別の質問方法として、php のソース コードを表示したり、何らかの方法でそれらのファイルをコピー/インクルードして表示したりする方法はありますか?

4

2 に答える 2

0

ユーザーをフォルダーに投獄することで、ユーザーを制限できます。

http://allanfeid.com/content/creating-chroot-jail-ssh-access

このようにして、ファイルを作成するためのフォルダーにアクセスできます。次に、PHP ファイルが必要なパスを指定します。または、オブジェクトまたは PHP 関数テンプレートを作成して、アクセスを呼び出すことができるようにします。

擬似コード:

class GlobalPaths 
function getPathToThisResource(return string)
于 2013-01-18T17:20:50.463 に答える
0

UNIX アカウント システムを使用して、特定のユーザーがファイルを読み取れないようにすることができます。問題は、PHP ファイルが相互にインクルードできる場合、相互にソースを読み取ることができることです。RPC システムを使用して、バックエンド コードを隠すことができます。フロントエンドは RPC インターフェイスとのみ通信し、バックエンド コードのソースを読み取る必要はありません。

たとえば、フロントエンドでは次のようになります。

<?php
error_reporting(-1);
function ask_backend($cmd, $args) {
    $decoded = json_decode($data = file_get_contents("http://localhost:8800/backend/rpc.php?cmd=" . urlencode($cmd) . "&args=" . urlencode(json_encode($args))),true);
    if ($decoded === null) throw new Exception("invalid data from backend: " . $data);
    if ($decoded["status"] !== "ok") throw new Exception("error occurred on backend: " . $data);
    return $decoded["msg"];
}
?>
The backend says:
<?php
$res = ask_backend("greeter", ["peter"]);
var_dump($res);
?>

rpc.phpバックエンドでは、次のようにすることができます。

<?php
error_reporting(-1);
$cmd = $_GET["cmd"];
$gargs = json_decode($_GET["args"],true);
$cmds = [
    "greeter" => function($args) {
        list($name) = $args;
        return "hello " . $name;
    }
];
$res = ($cmds[$cmd]($gargs));
$res =  json_encode(["status"=>"ok", "msg"=>$res]);
echo $res;
?>

この実装の欠点は、JSON シリアライズ可能なオブジェクトしか渡せないことです。もちろん、代わりにシリアル化に Protocol Buffers を使用できます。HTTP を使用する必要さえありませんが、PHP を実行している場合はおそらく既に HTTP サーバーを使用しているため、HTTP を使用しました。

RPC インターフェイスは localhost からのみ利用可能である必要があることに注意してください! そして、ユースケースにとって最も重要なことは、フロントエンドの開発者がソースを読み取る必要がないことです。一般にアクセス可能ではないため、バックエンドに PHPDaemon などを使用することを検討できます。これにより、適切な REST インターフェイスを簡単に構築できます。

于 2013-01-18T19:05:07.210 に答える