# ManagedBeans und Security



## chrisbad (17. Jul 2012)

Hallo Leute,

ich bin gerade auf ein kleines Verständnisproblem gestoßen das ich nicht gelöst bekomme.
Und zwar habe ich mich folgendes gefragt:

Ich habe eine ManagedBean für mehrere JSF-Seiten.
Manche der Seiten befinden sich in einem geschützten Bereich.
In meiner ManagedBean befinden sich verschiedene public Methoden.
Manche davon sollen nur durch einen Admin ausgelöst werden können.

Die Frage ist nun ob es theoretisch möglich ist eine Funktion in einer ManagedBean auszulösen ohne dass auf der JSF-Seite auf der ich mich gerade befinde eine Aktion dafür ausgelöst werden kann?
Also z. B. durch einen gefälschten Request mit den entsprechenden Parametern.
Oder ist JSF2 so sicher, dass ich nicht an Funktionen herankomme die ich nicht über eine Komponente der JSF-Seite angeboten bekomme?

In meinen Büchern steht z. B. drin, dass man das rendered-Attribute der Tags verwenden kann um bestimmte Funktionen nur bestimmten Usern zur Verfügung zu stellen. Aber ist das dann wirklich auch hackersicher? Sprich ist der Zugang zur Methode der Bean "gesperrt" nur weil die JSF-Seite keine Aktionsmöglichkeit dafür bietet?

Vielen Dank und LG 
Chris


----------



## F.S.WhiTeY (20. Jul 2012)

Moin,

wenn eine Methode oder Variable in der View nicht bekannt ist, kann man sie auch mit Injections nicht anbstoßen.

Also um deine Frage zu beantworten: Ja JSF ist so sicher das keiner an die Methoden ran kommt.

Warum ist das so? Naja das kann man sich aus dem Aufbau von JSF ableiten. Schauen wir uns doch mal die Aktionen die zu einem Request gehören vereinfacht an:

1. Du stellst eine anfrage an wasauchimmer..de/index.xhtml

2. Der Webserver registriert die Anfrage, schaut was er mit .xhtml-Dateien machen muss und registriert das er an den Servletcontainer weiterleiten muss.

3. Der Servletcontainer bekommt die Anfrage weitergeleitet, nimmt sie an und baut erstmal die View auf. Die View wird lediglich durch die JSF-Seite deklariert, nicht durch die Beans.

4. Nach aufbau des Komponentenbaumes der View ( hier hast du deine Antwort: Methode oder Variabele nicht im Komponentenbaum = nicht erreichbar ) schaut der Container ob die View durch Beans ( Controller ) beeinflusst wird. 

5. Nach aufbau aller Komponenten und Abhängigkeiten schmeißt der Container dem Webserver die Fertige, zu rendernde Seite zurück. Der Webserver leitet dann das Ergebnis an dich weiter. 

Fertig ist das Vereinfachte Request-Response-Modell bei JSF. Wie man sieht, keine Chance irgend etwas durch Injections oder der gleichen dazwischen zu schmeißen wenn der Entwickler nicht durch einen dummen zufall eine ungeschützte Variable in die View aufgenommen hat. 

Das ist ähnlich wie bei PHP. JSF bzw. Servlets werden serverseitig ausgeführt. 

HTH

David


----------



## nillehammer (20. Jul 2012)

Na DAS nenn ich mal ne gute Erklärung!


----------



## chrisbad (22. Jul 2012)

Hi,

ja, wollte ich hier auch noch loswerden ;-)

Dann kann ich vielleicht auch gleich die nächste Frage stellen:

Bei JavaEE6 kann man ja Security-Annotationen verwenden. Wofür sind die dann da? Kann es sein, dass sich diese dann auf EJB beziehen die ja "anders" angesprochen werden (local/remote) und Webservices?

LG Chris


----------



## F.S.WhiTeY (22. Jul 2012)

Hey,

du hast es genau richtig erkannt. JSF ist ein framework welches mithilfe von Servlets gebaut wurde. Servlets sind sogesehen mit EJB's gebaut. Klar kann man seine Webanwendunge mit EJB's selber bauen und alles händisch machen aber das ist nicht sinn und zweck von JSF.

Viele versteheb den unterschied zwischen Servlets und Frameworks nicht und kommen daher durcheinander. Eine ManagedBean ist auch keine "reine" EJB (obwohl sie dazu gehören).

Reine EJB's und Servlet-Programmierung ist viel tiefer in der Materie als die Entwicklung von Webanwendungen mit JSF oder Spring.

Wenn du dich tiefer in die materie einliest, wirst du verstehen was ich meine.

LG

David


----------



## chrisbad (22. Jul 2012)

F.S.WhiTeY hat gesagt.:


> Hey,
> [..]
> Wenn du dich tiefer in die materie einliest, wirst du verstehen was ich meine.
> [..]
> David



Ja, da bin ich grade dabei. Ich brauch's für den Job und muss mir das alles autodidaktisch einhämmern.
Zum Glück fällt mir das bei IT-Sachen recht leicht. Vielen Dank für deine Hilfe!

Zum Abschluss: Was muss man den generell bei JSF beachten damit eine Website einigermaßen sicher wird? Gibt es da eine Quelle mit Do's'n Don'ts?

LG Chris


----------



## F.S.WhiTeY (22. Jul 2012)

hey,

zu deiner letzten frage kann ich nur sagen: ja und nein.

du wirst genau so wie ich kein security experte sein. daher rate ich dir ein framework dafür zu benutzen. die leute die das entwickelt haben, haben eine ahnung von dem was sie da tun.
ich benutze spring security, es gibt aber auch noch etwas gutes von jboss.
diese komponenten werden dir viel arbeit und sorgen abnehmen. 

wenn du es aber mit gewalt selber machen willst, gelten die normalen design pattern. die design pattern findet man im internet kann sie aber auch als buch kaufen. 
noch eine möglichkeit ist es sich da etwas von anderen entwicklern oder phplern ab zuschauen. php ist weiter verbreitet und daher leichter zu finden.

aber wie schon gesagt: nimm lieber spring security oder änliches denn das ist nahezu idioten sicher.

lg

david


----------

