JSP Überprüfen ob Benutzer eingeloggt ist oder nicht | SessionSicherheit

Dit_

Bekanntes Mitglied
Hallo,

wenn der Benutzer sich einloggt, setze ich bestimmte Attribute:

Java:
...

//login DATEN OK und es handelt sich um einen normalen Benutzer....

String name = request.getParameter("name");
...
request.getSession().setAttribute("name", name);
request.getSession().setAttribute("userType", UserType.MEMBER); //es gibt MEMBER,GUEST,ADMIN
...

Solange der Benutzer sich auf der Webseite befindet und durch dir Pages navigiert, wird immer geprüft ob SessionAttribute "userType" gesetzt ist, je nach Type werden verschiedene Funktionen ein bzw. ausgeblendet.


Frage jetzt. Wie sicher ist so ein Vorgehen und ob es überhaupt in Ordnung ist was ich da mache. Ist es möglich Request bzw. SessionAttribute so zu manipulieren, dass ein Unberechtigter einfach Attribute "userType"= ADMIN setzt und sich damit zugang zu Adminfunktionen verschafft?


Danke schon mal :oops:
 

JanHH

Top Contributor
Das Speichern der Login-Information in der Session ist der übliche Weg (wo soll mans auch sonst speichern?) und ist in Ordnung.

Allerdings würde ich nicht einfach so direkt da diese Infos ablegen, sondern eher eine Klassenstruktur dafür basteln. Und praktikabler ale bestimmte Typen ist es, ein Rollenkonzept zu benutzen (sozusagen "wer darf was"). Denn die Typen überschneiden sich und das wird auf Dauer etwas unübersichtlich.
 

Dit_

Bekanntes Mitglied
Also ich holle aus der Datenbank mit Hilfe von Hibernate ein User-Objekt in dem stehen alle informationen des Benutzers. Du meinst also ich könnte dieses User-Objekt als Attribute setzen? Das wäre natürlich nicht schlecht so könnte ich immer zugriff auf alle Daten die ich brauche.
 
S

SlaterB

Gast
Hibernate-Objekte muss man nicht unbedingt speichern,
aber anstatt dessen Informationsgehalt in der Session in String-Attributen nachzubauen,
kann man immer eine Art Copy-Bean, z.B. UserCopy erstellen, darin boolean-Attribute usw.

komplett betrieben braucht es in der Session vielleicht nur einen einzigen Eintrag
-> ein Objekt MySession bzw. besser benannt, mit Referenzen auf UserCopy usw.,
selbst kurzlebige aktuelle Daten zum Request könnte man irgendwo in MySession ablegen,
statt in der Session unter "requestData" usw.

das ist keine Abwertung der Session, die muss genau so gebaut sein, könnte höchstens auch auf ein Objekt eingeschränkt sein,
aber wozu sich ohne Not einschränken,
dennoch ist es denkbar, bzw. in meinen Augen empfehlenswert, die Verwaltung zu 99% in eigene Klasse zu legen
und nur ein Objekt davon in die Session


sicher sollten solche Daten jedenfalls sein, so sicher wie generell alle Java-Variablen/ Objekte,
natürlich kann nicht insgesamt ausgeschlossen werden, dass andere unbekannte Code-Teile Zugriff auf die Session haben

eine kleine Steigerung: in der Session gar nichts ablegen, nur das Session-Objekt selber, welches hoffentlich beständig ist,
als Key in einer statischen Datenstruktur oder DB verwenden,
HashMap falls gleichbleibender Hashcode, was ohne eigene Änderungen der Fall sein solle, notfalls mit == alle bekannten Sessions durchlaufen,

größere Framework-Strukturen wie vielleicht Abgleich der Sessions zwischen mehreren Server-Computern (Cluster)
gehen dann weniger, also allgemein keine gute Idee,
nur im kleinen Rahmen als Test, wobei man dann kaum über Sicherheit nachdenkt
 
D

DebbsiPupsi

Gast
Schönen Mittag liebe Mit-Entwickler :D

Ich habe einen Chat geschrieben, der über einen Tomcatserver läuft und mit Hibernate und Shiro in Verbindung steht.

Das Problem ist, dass ich in einer Datenbank mehrere Benutzer angelegt habe, die dort mit Passwort und ID angelegt sind. Allerdings kann ich mit shiro nicht wirklich verhindern, dass ein eingeloggter user auf diese Datenbank zugreifen kann und sie die Passwörter klaut! Ich verstehe einfach nicht die Verbindung zwischen Roles und Users etc..bei Shiro und bräuchte dringend hilfe :D

Hier schonmal ein ausschnitt was ich bis jetzt hinbekommen habe...

Code:
[urls]
/ = anon
/index.jsp = anon
/chat/User/login = anon
/chat/User/register = anon
/images/** = anon
/js/** = anon
/css/** = anon
/fatClientUpdate/** = anon
/chat/Update/getVersion = anon
/chat/User/unauthorizedContentSwitch = anon
/** = user

natürlich habe ich auch die [Main] angelegt ;)

Die letzte Zeile zeigt mein Problem... der user darf noch alles, soll aber nur in meine ChatController kommen dürfen. Wenn ich ihn aber direkt zu den controllern leite, kann man trotzdem auf die Datenbank inhalte zugreifen. :(

Ich hoffe ihr versteht was ich meine xD

Ganz Liebe Grüße
Deborah
 
S

Sym

Gast
Ich verstehe Dein Problem nicht. Der Datenbankzugriff ist doch durch den Tomcat gekapselt. Ein eingeloggter Benutzer sollte doch nur mit Deinen Service-Methoden reden können. Und diese musst Du entsprechend durch Logik innerhalb des Services sichern.

Hast Du ein konkretes Beispiel, wo der Benutzer zu viele Daten erhält?
 
D

DebbsiPupsi

Gast
Danke hat sich schon erledigt. Musste nur die Datenbank in ein, für den Benutzer, nicht erreichbares Verzeichnis verschieben :D

Aber um es noch mal zu verdeutlichen:

Der Angemeldete User konnte meine Datenbank mit den Passwörtern über die URL im Browser aufrufen und ansehen. Wenn der Benutzer dann noch meine Methoden-Namen kennt konnte er so mein Programm beeinflussen und manipulieren. Das wollte ich mit Shiro verhindern, aber hat jetzt anders funktioniert ^^

DANKE
 

Ähnliche Java Themen

Neue Themen


Oben