Thread loginscript für Apache und mysql (16 answers)
Opened by piet at 2013-02-09 12:21

topeg
 2013-02-11 22:30
#165732 #165732
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Du stellst es dir einfacher vor als es ist.

Jeder Zugriff auf eine Seite oder Script muss geprüft werden. Es geht nicht, das man nur einmal Prüft. Das liegt daran, dass HTTP ein zustandsloses Protokoll ist. Jeder Zugriff ist völlig unabhängig von allen vorherigen und allen nächsten.
Damit nicht bei jedem Zugriff die Frage nach Name und Passwort auftaucht, gibt es eine "Session". Das ist ein Datensatz auf dem Server, der Notizen enthält (ID der session, ob das login erfolgt ist, Daten zur Identifizierung des Browsers.). Zu wem die Notizen gehören bestimmt eine SessionID welche dem Nutzer mitgeben wird, und die er unsichtbar als Cookie oder als GET/POST Parameter bei jedem Zugriff an den Server sendet. Das zu Login und Session.

Nun zum eigentlichen Schutz.
Du musst alle wesentlichen Zugriffe auf ein Script umleiten, welches diese Auswertet. Diese lädt, wenn der Zugriff erlaubt ist, die richtige HTML-Seite und sendet sie den Anfragenden zurück. Wenn die Datei ein Script ist, muss das kontrollierende Script dieses an seiner statt starten.

Das Umleiten von Zugriffen kannst zu über die .htaccess machen. Der vollständige Pfad des Zugriffes findest du dann in den Umgebungsvariablen ($ENV{PATH_INFO}). Dort findest du dann auch die SessionID entweder unter den GET-Parametern ($ENV{QUERY_STRING}) oder in einem Cookie ($ENV{HTTP_COOKIE}). Das wertest du aus (das Modul CPAN:CGI kann dir dabei helfen). Wenn alles korrekt, ist zeigst du die Seite/Script, wenn nicht dann Zeigst du das Login.

Bei Scripten musst du schauen in welcher Sprache sie geschrieben sind und per exec('interpreter','script') starten. Hier musst du vorsichtig sein, wenn du das Modul CPAN:CGI benutzt. Normalerweise nimmt es sich was es kriegen kann und leert auch den Puffer für "POST" requests. Du kannst CGI zwingen POST anfragen zu ignorieren. Dann bleibt der Puffer unangetastet (du bekommst aber Probleme, wenn nur dort die SessionID zu finden ist). Weiterhin musst du darauf achten nicht alles mögliche an die Interpreter zu senden. Das kann enorme Sicherheitslöcher reißen. Das selbe gilt auch beim anzeigen der Seiten. Prüfe die Pfade sehr genau und stelle sicher das nur Dateien, die zur Seite gehören geladen werden.

Also noch einmal stichwortartig:

- schreibe eine .htaccess die alle HTML und Scriptanfragen an ein Script umleitet.
Beispiel: /cgi-bin/session.pl
Code: (dl )
1
2
3
RewriteEngine On
RewriteBase /public
RewriteRule ^(.*) /cgi-bin/session.pl/$1


- Im Script:
  • prüfe die SessionID
  • Zeige Login wenn nötig
  • prüfe Pfad
  • lade und sende Seite oder starte script

View full thread loginscript für Apache und mysql