Andreas Korthaus: HTTP Auth (wieder mal...)

Beitrag lesen

Hallo!

Naja ich versuch mich mal genauer auszudrücken, da fängt langsam an der schuh zu drücken ;)

Wie gesagt, ohne genauen Code kann man da nicht all zu viel drüber sagen. Sachen die für den einen selbstverständlich sind, sind es für den anderen noch lange nicht!

Zuerst der login. Daten in ein forumular eingeben die mit den daten ausner MySQL db verglichen werden, wenn ok dann login.

Theoretisch OK.

Nun bekommt der Surfer ne session id ( id = id in der mysql db ), die ist unabhängig davon was der browser für ne session id vergibt.

seit wann vergibt ein Browser Session-IDs? Die SessionID gibt der Server dem Browser, ist also identisch mit der in der DB wenn ich das jetzt richtig verstanden habe.

Wenn er jetzt zb nen forums post machen will, überprüfe ich zuerst ob in der session eine gültige session id gespeichert ist ( also ob der user überhaupt in der DB existiert )

Ich blicke noch nicht ganz da durch was genau Du jetzt alles als SessionID bezeichnest, wo Du was speicherst.

In den forums-formular gibt es ein hidden field, darüber wird die session ID verschickt. Auf der zu verarbeitenden seite überprüfe ich ob $_POST["sessionID"] gleich der $_SESSION["id"] ( wieder die ID des users aus der login db ) ist. wenn das nicht der fall ist - kein post.

Es kommt drauf an was Du danach mit den Informationen genau machst! Wenn Du erst eine Prüfung machst ob die IDs übereinstimmen, und dannach, wenn erstere prüfung erfolgreich war, direkt das machst was der User will(Post abschicken/editieren...), dann könnte es Probleme geben. Du hast so sichergestellt, das es ein user aus der DB ist, also kann jeder User aus der DB Posten. Das wäre OK. Wenn Du jetzt z.B. ein Posting editieren willst, prüfst das genau wie oben und wenn die Prüfung erfolgreich war hast Du noch eine Posting-ID übermittelt und editierst das dann direkt, hast Du ein Problem, das jeder User jedes Posting editieren kann wenn er an den Parametern spielt. Du brauchst also noch vor dem editieren eine weitere Prüfung ob der User mit besagter UserID auch befugt ist dieses posting zu editieren, indem Du in der DB nachguckst ob Die Autor-ID mit der ID in der Session übereinstimmt.

Denn wenn Du die Parameter editPost.php?userID=123&postID=312 verwendest, könnte ich den Request einfach so abändern, dass ich userID in meine gültige ID ändere und schon darf ich das machen.

Aber vielleicht war Dir das auch klar, kann nur solche Sachen konstruieren ohne genauen Code der Dir Kopfschmerzen bereitet.

Theorethisch - zumindest denke ich das - dürfte auch wirklich nur ein eigeloggter user nen post machen können, oder?

ich denke schon. Schwieriger wird es wenn Du user-individuelle Aktionen wie editieren o.ä. ermöglichen willst.

Er kann zwar ein externes formular machen, was die gleiche id hat wie die die er im quelltext lesen kann ( die er eigentlich nicht lesen kann, weil wenn er es lesen könnte bräuchte er sich die mühe nicht machen ) er wird aber niemals an die sessionID kommen die ich der session nach dem login verpasse, also die ID aus der db. oder?

Die Frage ist ob er das braucht, ich denke posten kann er nicht ohne eingeloggt zu sein, aber auch das nur unter vorbehalt.

Grüße
Andreas

PS: in Zusammenhang mit PHP ist SessionID für mich der md5-String den PHP zufällig standardmäßig als $PHPSESSID vergibt.