3

ここの誰かが私を助けてくれることを願っています。私はこの問題について約3時間グーグルで調べましたが、何も役に立ちませんでした。(いいえ、stackoverflow.com / questions / 1539506の下の回答は役に立ちませんでした)

PHPがインストールされたIIS7を使用しています。テストWebサイトの認証モードを「Windows認証」に設定しました。それはすべてうまくいきます(私はPHPで「REMOTE_USER」を受け取ります)。

「scandir()」や「is_file()」などの関数を使用してネットワーク共有にアクセスする必要がありますが、「アクセスが拒否されました」や「dirを開けませんでした:そのようなファイルやディレクトリはありません」などのエラーメッセージしか表示されません。 。

権限が正しく設定されています。認証を「匿名」に設定し、「ユーザーID」を現在のテストユーザーに設定すると、すべて正常に機能しますが、「Windows認証」を使用する必要があります

ネットワーク共有を仮想ディレクトリとして設定しようとしましたが、PHPはこのディレクトリを見つけられませんでした(phpinfo()は「仮想ディレクトリのサポート」が無効になっていると言っていますが、これを有効にする方法については何も見つかりませんでした)

PS:Apacheサーバーで同じPHP構成を試しましたが、すべて完璧に機能します。(「auth_sspi」モジュールと「reqirevalid-user」ディレクティブを使用)。しかし、IISでこの作業を行う必要があります。

4

1 に答える 1

1

今朝、私が取り組んでいる単純なファイル整理アプリでこの課題に直面しました。

セキュリティの専門家の観点からこれを調べたことはありませんが、これは理想的ではないという予感があります。私のアプリは非公開なので、あまり心配していません。私が知る限り、問題はネットワーク共有が IIS AppPool ユーザーによってマウント/承認されている必要があるということです。

PHP System Callの man ページで、システム コールを実行するためのこの例を見つけました。

<?php

function my_exec($cmd, $input = '') 
{
    $desc = array(
        0 => array('pipe', 'r'),
        1 => array('pipe', 'w'),
        2 => array('pipe', 'w')
    );

    $proc = proc_open($cmd, $desc, $pipes); 
    fwrite($pipes[0], $input);

    $stdout = stream_get_contents($pipes[1]);
    $stderr = stream_get_contents($pipes[2]);

    fclose($pipes[0]); 
    fclose($pipes[1]); 
    fclose($pipes[2]); 

    $rtn = proc_close($proc); 

    return array('stdout' => $stdout, 'stderr' => $stderr, 'return' => $rtn);
}

?>

次に、これを呼び出して共有にアクセスできました。

my_exec('net use \\\\$MachineName\$ShareName /user:$User $Pass');

一重引用符を使用しても、先頭の \ を二重にエスケープする必要があることがわかりました。変数を使用し、引用符を double に変更する場合は、適切に調整する必要があるでしょう。

少し興味があるので、これがどのように機能するか教えてください。

于 2013-09-17T14:54:41.260 に答える