Sofern Sie die Einstellungen nicht geändert haben, werden PHP-Sitzungsdaten in einer Variation ihres eigenen serialize () -Formats in einem temporären Verzeichnis gespeichert, und es ist nicht einfach, dies ohne Verwendung von PHP selbst zu erreichen.
Leider möchten Sie anscheinend die Geschwindigkeit statisch bereitgestellter Dateien, während Sie jede Anforderung dynamisch autorisieren, die nicht wirklich kompatible Ziele sind. Sie könnten kompromittieren, indem Sie ein superleichtes PHP-Skript haben, das Sie dann mit mod_rewrite umschreiben, um Anforderungen an Dateien darin umzuschreiben, was durch Dinge geht, die in Ordnung sind. Super einfaches Beispiel:
.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";
}
}
Insbesondere läuft dieses PHP-Skript für immer, sodass Sie Apache neu starten müssen, wenn Sie es ändern, denke ich.
Das ist alles ungetestet, aber das ist ungefähr die Richtung, in die du gehen müsstest.
Verweise:
Wenn Sie ein bestimmtes Cookie hatten, das Sie erwarten können, können Sie es mit mod_rewrite auf seine Abwesenheit testen und ein 403 Forbidden geben.
RewriteCond %{HTTP_COOKIE} !LoggedIn=true
RewriteRule .* - [F,L]
Aber wenn jemand wüsste, dass er ein Cookie-Set mit "LoggedIn = true" benötigt, könnte er Ihren "Schutz" leicht umgehen.
Eine PHP-Sitzung ist spezifisch für PHP. Apache hat keine Möglichkeit, Informationen in einer PHP-Sitzung zu verwenden. Sie müssten ein Authentifizierungsmodul speziell für die Sitzungsüberprüfung haben.
Ich habe gesehen, dass die meisten Leute ein PHP-Skript haben, das die Bereitstellung des statischen Inhalts übernimmt, indem es die Anforderung erhält, die Sitzung überprüft, die Datei einliest und den Inhalt mit den entsprechenden MIME-Informationen versendet.
quelle
Die herkömmliche Lösung für dieses Problem besteht darin, jeden Aufruf dieses Ordners in eine PHP-Datei umzuleiten, die die Benutzerberechtigungen überprüft und anschließend die Datei liest und an den Ausgabestream sendet oder den Benutzer an "keine Berechtigung" weiterleitet. Seite? ˅. Zum Beispiel...
Eine andere schwierige Möglichkeit, Ihre Dateien zu schützen, besteht darin, ein Token aus der session_id und einem statischen Salt (und optisch aus dem statischen Dateipfad) zu generieren und es durch den Dateizugriff zu überprüfen. Sie müssen dieses Token also in Ihrer htaccess-Datei neu generieren. Ich weiß nicht, ob es nur mit .htaccess möglich ist oder ob Sie dafür PHP verwenden müssen. Ich habe hier eine ähnliche Lösung gefunden. Ich bin zu 99% davon überzeugt, dass der md5 keine eingebaute Mod-Rewrite-Funktion ist.
quelle
RewriteMap
eineprg://…
Shell-Skript-Ressource zu verwenden, die die gesamte MD5-Verschlüsselung und -Verifizierung übernimmt. Ich muss dies testen und sicherstellen, dass es in meinem Setup funktioniert, aber es sieht so aus, als ob es mit Vanilla Apache + dem mod_rewrite-Modul funktionieren sollte.Mein Plan, dieses Problem zu lösen, ist jetzt zu
Leiten Sie die Anfrage an PHP weiter
Authentifizieren Sie den Benutzer in PHP (alle anderen Authentifizierungsmethoden sind möglicherweise zu schwach oder erfordern das ständige Schreiben in Dateien).
Verwenden Sie Apaches
mod_xsendfile
( docs , github )quelle
Ja zu Basic Auth, wenn Sie mod_php verwenden. http://php.net/manual/en/features.http-auth.php
quelle