0

私はここで前にこの質問をしましたが、ユーザーCheekySoftは、「提案されたソリューションを実装する方法を尋ねている」と指摘しました。代わりに、「問題を述べてソリューションのアイデアを求める」必要があります。だからここに行きます。

Linuxサーバーでは、ファイルを次のように設定しています。

/home
├──  user1
│   ├── [-rwx------]  index.html
│   └── [-rwx------]  index.php
└──  user2
    ├── [-rwx------]  index.html
    └── [-rwx------]  index.php

Apache仮想ホストをで設定している場合

<Directory /home/user1>`
<Directory /home/user2>

次に、[任意の]ユーザーはwww.example.com/user1/index.htmlまたはに移動できwww.example.com/user2/index.htmlます。ただし、これらのファイルのアクセス許可は0700、したがって、Web経由ではアクセスできません。私がsuPHPを使用しているのはこのためです。

議論のためにindex.php、次のようなものだけが含まれているとしましょう

index.php:

<?php
echo file_get_contents('index.html');
exit();
?> 

これで、suPHPが設定されたので、user1は www.example.com/user1/index.phpviewに移動できますindex.html。同様に、user2は www.example.com/user2/index.phpviewに移動できますindex.html。ただし、user1はuser2のページを表示するために移動することでき、user2の場合はその逆も可能です。www.example.com/user2/index.phpindex.html

これに対処する自然な方法は、PHPセッションを使用することです。ページへのすべてのリクエストはメインページ(つまりwww.facebook.com)にリダイレクトされ、ユーザーはデータベースに対して検証されてから、正しいページにリダイレクトされます(下の画像を参照)。

ユーザーインタラクション図

ユーザーはページ(つまり)に移動し、有効なセッションが存在することを確認するためにハードコーディングされwww.example.com/page1.htmlたページ1の一部があります。存在する場合は、ページがロードされます。存在しない場合、ユーザーはこの場合はにリダイレクトされます。ログインして有効なセッションが確立されると、元のページにリダイレクトされます。これを実行するように変更できます。index.htmlindex.php

indexValidate.php:

<?php
//this is purely pseudo code, I can't guarantee it will work
session_start();
require_once 'Session_Validator.php';
$sv = new Session_Validator();
$sv->validate($un, $pwd);

echo file_get_contents('index.html');
exit();
?>

ただし、私の設計では、これらのページ(page1.htmlpage2.html...)はユーザー自身のディレクトリ(index.htmlindex.php)にあるため、サーバーは、有効なセクションをチェックするこのハードコードされたセクションがあることを要求できません。ユーザーはファイルを編集するだけで、このセクションを削除できます。もちろん、これはユーザーの側ではばかげていますが、セッションチェックセクションが上部にあるように、ユーザーがファイルをすべて変更する必要はありません。これをシームレスにしたいと思います。

いくつかの注意:

  1. Apacheを使用して、すべてのリクエストを単一のvalidateUser.phpスクリプトにリダイレクトできます。このスクリプトは、ユーザーを検証し、有効な場合は、リクエストされた元のスクリプトを呼び出します。ただし、これには、suPHPがすでにユーザーに切り替えられているという副作用があります。var-www
  2. ApacheWebログイン認証を使用したくない

誰かが私の問題の解決策を提供できますか?

4

1 に答える 1

1

すべてのユーザーに対してapache書き換えルールを作成し、すべてのページに対して1つのPHPラッパーを作成するのはどうですか。HTML

RewriteRuleは次のようになります。

RewriteCond %{REQUEST_URI} !^/auth
RewriteRule ^(.*) /auth/wrapper.php?uri=$1

そしてでwrapper.php

  1. ユーザーが検証されているかどうかを確認します。そうでない場合は、にリダイレクトします/auth/validate.php?redirect=<where-I-came-from>
  2. 検証されたら、に記載されているファイルをロードしますuri=<...>

    echo file_get_contents('<...>');

編集:wrapper.phpへのシンボリックリンクを作成してから、シンボリックリンクのアクセス許可をユーザーに設定できます。これは、authフォルダーで行うことができます。

ln -s wrapper.php username1.php
chown -h username1:username1 username1.php

次に、次のようなフォルダを取得します。

-r--r--r--. 1 var-www   var-www   15 march   3 12:45 wrapper.php
lrwxrwxrwx. 1 username1 username1 17 march   3 12:47 username1.php -> wrapper.php
lrwxrwxrwx. 1 username2 username2 17 march   3 12:52 username2.php -> wrapper.php
lrwxrwxrwx. 1 username3 username3 17 march   3 12:52 username3.php -> wrapper.php

注意:ユーザーはauthディレクトリを読み取れる必要があります。さらに安全にするために、wrapper.phpを別のディレクトリに配置できます。

于 2012-03-03T01:10:30.073 に答える