7

ログインのような機能を suPHP のファイル許可を使用するように設計するにはどうすればよいでしょうか。たとえば、 に Web サイトがwww.example.comあり、次の 2 人のユーザーが独自のホーム ディレクトリを持ち、それぞれに php scripttest.phpがあり、ディレクトリ内validateUser.phpに別のユーザー (root、www-data、apache...) に属するスクリプトがあるとします/home

/家/
├──validateUser.php
├── ユーザー1
│ └── test.php
└── ユーザー2
    └──test.php

user1user2'sにアクセスしてスクリプトにアクセスできwww.example.com/user2/test.php、その逆も可能です。代わりに、 mod_rewriteのようなものを使用して、すべての受信リクエストをvalidateUser.php. ただし、これを行うとvalidateUser.php、ターゲットtest.phpスクリプトではなく、 の所有者としてすべてのスクリプトを実行することになります。

とにかく suPHP が作動する前に php スクリプトを呼び出してから、suPHP を続行させるか、完全に中止する必要がありますか?


編集これは私が立てている 2 番目の報奨金です。私が最初に Gustav b/c に渡したとき、彼は良い部分的な答えをくれました。私がこれまでに試みたことと、それらのどれもがうまくいかない理由について述べます。

1) mod_rewriteを使用して URL をリダイレクトしvalidateUser.php、ユーザーをログインさせるか、呼び出したいスクリプトを呼び出してみました。問題は、各ユーザーが独自の仮想サイトを持つように仮想ホストを設定したことです (つまりwww.user1.example.comwww.user2.example.com...これが悪い設計アプローチである場合は、遠慮なく指摘してください)。したがって、OS はファイル構造を上記のように認識しますが、オンラインでは、ルート ディレクトリはそのように設定されます。

VirtualHost = www.user1.example.com
├── validateUser.php
└── test.php
VirtualHost = www.user2.example.com
├── validateUser.php
└── test.php

validateUser.php当然のことながら、すべてのユーザーのディレクトリにのコピーを移動しました。問題は、ユーザーがそのファイルを削除して、ログインをまったく必要としないなど、必要なものをそこに入れることができるようになったことです。これを回避する方法は、ホーム フォルダーをスティッキーにし (ホーム フォルダーに対して行うことは決してお勧めしません)、validateUser.php所有者をルートにすることです。ただし、これは suPHP であるため、AS root が実行されます。そこで諦めました。

2) Gustav のmod_auth提案を使用することもできますが、前もってパスワードを要求するのは好きではありません (古い学校の Web サイトのように)。

3) 仮想ホスト間でリダイレクトできる場合は、1) のバリアントを検討しました。たとえば、次のように仮想ホストを再構築します

VirtualHost = www.user1.example.com
└── test.php
VirtualHost = www.user2.example.com
└── test.php
VirtualHost = www.admin.example.com
└── validateUser.php

次に mod_rewrite を使用して、ユーザーからwww.admin.example.com/validateUser.phpのすべてのトラフィックを にリダイレクトします。ユーザーがログインしている場合 (またはログインが成功した場合)、ユーザーは最初にログインしようとしたサイトにリダイレクトされます。これの利点は、可能であれば、ユーザーが自分の仮想ホストに戻されるまで suPHP が開始されないことです。

4

1 に答える 1

2

mod_authを使用してユーザー認証を実装することを検討しましたか? 試してみることにした場合は、役立つガイドがあります。

Apache 2.2 に相当するもの:

ブラウザーは資格情報を保存し、要求を行うたびにヘッダーでそれらを送信することに注意してください。

于 2011-11-15T13:05:04.213 に答える