回答:
設定を変更しない限り、PHPセッションデータは、独自のserialize()形式のバリエーションで一時ディレクトリに保存されます。PHP自体を使用しないと、そのセッションを取得するのは簡単ではありません。
残念ながら、実際に互換性のある目標ではない、各リクエストを動的に承認しながら、静的に配信されるファイルの速度を求めているように見えます。あなたはmod_rewriteを使ってその中のファイルへのリクエストを書き換える超軽量のPHPスクリプトを作成することで妥協するかもしれません。超簡単な例:
.htaccess:
RewriteEngine On
RewriteMap auth prg:auth.php
RewriteRule (.*) ${auth:$1}
auth.php:
#!/usr/bin/php
<?PHP
set_time_limit(0); # This program needs to run forever.
$stdin = fopen("php://stdin","r"); # Keeps reading from standard in
while (true) {
$line = trim(fgets($stdin));
if (isset($_SESSION['USER_LOGGED_IN'])) {
echo $line\n";
} else {
echo "authfailed.html\n";
}
}
特に、そのPHPスクリプトは永久に実行されるため、変更した場合はApacheを再起動する必要があると思います。
これはすべてテストされていませんが、大体はあなたが入らなければならないと私が思う方向です。
参照:
期待できる特定のCookieがある場合は、mod_rewriteを使用してその不在をテストし、403 Forbiddenを指定できます。
RewriteCond %{HTTP_COOKIE} !LoggedIn=true
RewriteRule .* - [F,L]
しかし、「LoggedIn = true」が設定されたCookieが必要であることを誰かが知っていれば、簡単に「保護」を回避できます。
PHPセッションはPHPに固有です。Apacheには、PHPセッションで情報を使用する方法がありません。セッションの検証を行うための認証モジュールが必要です。
ほとんどの人が見ているのは、PHPスクリプトに静的コンテンツの処理を処理させ、リクエストを取得し、セッションを検証し、ファイルを読み取って、適切なMIME情報でコンテンツを送信することです。
その問題の従来の解決策は、そのフォルダーのすべての呼び出しをphpファイルにリダイレクトすることです。これにより、ユーザーの権限がチェックされ、その後、ファイルが読み取られ、出力ストリームに送信されるか、ユーザーが「権限なし」にリダイレクトされます。地点。 例えば...
ファイルを保護するもう1つのトリッキーな方法は、session_idと静的ソルトからトークンを生成し(オプションで静的ファイルパスから)、ファイルアクセスによってそれをチェックすることです。そのため、htaccessファイルでそのトークンを再生成する必要があります。.htaccessでのみ可能かどうか、またはそのためにphpを使用する必要があるかどうかはわかりません。私はここで同様の解決策を見つけました。私は99%確信しています。md5は組み込みのmod書き換え機能ではないということです。
RewriteMap
するprg://…
シェルスクリプトリソースに使用するアイデアが気に入っています。これをテストして、セットアップで機能することを確認する必要がありますが、バニラApache + mod_rewriteモジュールで機能するようです。
この問題を解決する私の計画は今
リクエストをPHPにリダイレクトする
RewriteEngine on
RewriteRule ([0-9a-z-_]+)$ authenticateUser.php?&file=$1 [L]
PHPでユーザーを認証します(他のすべての認証方法は弱すぎるか、常にファイルに書き込む必要があります)
if ( User::hasPermission() && isSane( $filePath ) ) {
//
header( 'X-Sendfile: ' . $filePath );
}
Apacheを使用mod_xsendfile
(docs、github)
はい、mod_phpを使用している場合は、基本認証を使用してください。http://php.net/manual/en/features.http-auth.php