0

http://models.example.com/*のすべてのリクエストを書き直したいhttp://models.example.com/handler.php?requested_url=*

次に、変数をhandler.phpチェックして$_SESSION、ユーザーがログインしているかどうかを確認します。ユーザーがログインしている場合は、にhandler.phpリダイレクトしrequested_urlます。

ユーザーがログインしていない場合は、handler.php正規表現を使用してrequested_url、とパーミッションルールの配列(ruleList.php)の間の一致を検索します。handler.phpログインしていないユーザーにアクセスを許可するルールがあることがわかった場合は、requested_urlにリダイレクトrequested_urlされます。それ以外の場合は、ログインページにリダイレクトされます。

私の問題はこれです:最初のリクエストとリダイレクトをどのように区別しますか?(無限ループを回避するため)。のような変数を追加できます&already_processed=trueが、それは完全に安全ではありません。

mod_authを使用しますが、問題は、Webサイトの管理パネル(ruleList.php)を介してアクセス許可を設定できるようにすることです。パーミッションルールは複雑になる可能性があり、それらを設定する人はサーバーのhttpd.confファイルをいじくり回す必要はありません。mod_authのもう1つの問題は、変更にはサーバーのリセットが必要になることです。

この件についてのご意見をいただければ幸いです。

4

1 に答える 1

1

... にリダイレクトします ...

リダイレクトは常に安全ではありません。アクションをクライアント (ブラウザ) に戻し、リクエストを終了します。

つまり、次のリクエストは新しいリクエストであり、セッションに追加するまで、Apache と PHP スクリプトの両方に、リクエストが新しいかどうかの情報がありません。

ただし、Apache Web サーバーでリソースを提供する必要があるため、Apache 内でセッションを確認する必要があります。つまり、書き換えの条件としていくつかの環境変数などを確認できるように、apache を拡張する必要があります。

ご想像のとおり、これは少し複雑です。

mod_auth、IIRCについて言及したように、Mysqlデータベースに対してクエリを実行できます。そうすれば、リクエスト URI に対して検証することさえできるかもしれません。それはおそらくあなたの場合の簡単な変種です。

于 2012-09-23T22:18:29.640 に答える