Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Forensoftware (https://boardunity.de/forensoftware-f5.html)
-   -   sessionsystem (https://boardunity.de/sessionsystem-t991.html)

Björn 26.11.2003 21:13

sessionsystem
 
hiho
irgendwo meinte wer das das session system von php nicht so sicher sei..
was is da dran und was gibt es für alternativen???
mfg

DaddyCool 26.11.2003 23:34

Das Problem mit dem PHP Sessions ist, das eine Übernahme durch einenf remden sehr einfach möglich ist.

Kenn ich den Namen der Session und eine Sessionid dann kann ich die Session ganz einfach übernehmen, da nicht kontrolliert wird ob ich der eigentliche Inhaber der Session bin.

So könnte man z.B. Accounts in Foren übernehmen usw.

Björn 27.11.2003 13:15

jo das ist mir bekannt
ich umgeh das indem ich in der session paar benutzer variabeln speicher (unter anderem ip)
wenn das nicht übereinstimmt, wird halt eine neue variabel gesetzt

gibt es noch andere möglichkeiten?
mfg

DaddyCool 27.11.2003 15:30

Zitat:

Original geschrieben von ciruZ
Der Session Teil von PHP ist besonders in alten PHP Versionen so verbuggt, das man ihn absolut nicht verwenden sollte.
Man kann z.B. selber sogar festlegen, wie die sesion heißt, also z.B. abc. Also sicher kann man das echt nicht nennen. Alternativen? Selber eins schreiben! ;)

Mooooment, nur weil ich bestimmen kann wie die Session heissen soll ist sie verbuggt??

Das man Sessions ganz einfach übernehmen kann ist ja bekannt und gewollt.

Nenn mal bitte ein paar Bugs.

Björn 27.11.2003 16:21

naja ich find das mit session bennen ganz nett PHPSESSID oder was daran gehängt wird recht unstylisch

mfg

Boardster 27.11.2003 16:36

Zitat:

Original geschrieben von trashar
naja ich find das mit session bennen ganz nett PHPSESSID oder was daran gehängt wird recht unstylisch

mfg

Wie bitte?

DaddyCool 27.11.2003 19:01

Zitat:

Original geschrieben von ciruZ
Du verstehst mich falsch.
Du kannst ganz einfach sid=abc machen, das klappt auch noch.

Du rufst eine Seite auf, und übergibst eine SID.
PHP überprüft ob es diese gibt, wenn ja wird sie geladen, wenn nicht wird sie halt angelegt.

Wo ist da das Problem?? Was hättest du davon wenn PHP ne neue generieren würde?? Gut, die Session ID ist ein wenig kurz, aber sie ist gültig.

Ich seh da nicht wirklich ein Problem drin.

Björn 27.11.2003 20:06

Zitat:

Original geschrieben von Boardster
Wie bitte?
ist schon ok.. eigentlich total sinnlos :rolleyes:

zum thema
die session ist doch sowieso nur eine bestimmte zeit gültig
und wer sich selber eine mit sid=abc anhängt tja da kann man nichs machen.. evtl per script die länge oder so überprüfen!
ein normaler hash besteht doch aus einem md5() hash oder irre ich mich da?

also ich speicher wie gesagt paar sachen in der session und check die bei jeden seiten aufruf ohne db!
sollte dies nicht passen wird der user sofort weitergeleitet und ihm wird eine neue session id erstellt
sollte doch relativ sicher sein
weil sonst hät ja jedes board ne potentielle sicherheitslücke
mfg

DaddyCool 27.11.2003 23:36

Zitat:

Original geschrieben von ciruZ
So lange es nur wenig User sind, ist sowas noch akzeptabel - aber bei was großem?
Was soll dann sein??

Zitat:

Oder dann die ganzen Security Bugs die PHP in den alten Versionen in Sachen Session System hatte.
Du glaubst doch wohl nicht ernsthaft das eine Funktion die von einer Person erdacht und getestet wurde sicherer ist als eine die von Millionen von Entwicklern täglich eingesetzt wird.

Je weniger Personen eine Funktion testen desto größer ist die Wahrscheinlichkeit das sie fehlerhaft ist.

DaddyCool 27.11.2003 23:38

Zitat:

Original geschrieben von trashar
ein normaler hash besteht doch aus einem md5() hash oder irre ich mich da?
Obs ein md5() Hash ist kann ich nicht sagen, das einzige was fest steht, eine SID die von PHP erzeugt wird ist normalerweise 32 Zeichen lang (genauso wie eine md5() hash)

TRS 28.11.2003 16:11

Vielleicht könnten wir hier mal einige Fakten zusammentragen, denn hier wird wieder ohne stichhaltige Beweise diskutiert und bei solch einem Thema sollte man schon seine Behauptungen hinterlegen können.

Ich kenn mich jetzt nicht mit Sessions so gut aus, aber ich trage mein Wissen zusammen:

Der Sessionname kann frei gewählt werden, dabei spielt es absolut keine Rolle, ob der Name PHPSESSID ( Standart )oder s oder nasenhaare ist.

Bei der eigentlichen Session handelt sich um eine 32stellige Kombination von Ziffern und Zahlen in einer zufälligen Reihenfolge. Sie wird immer nur einmal zugewiesen, so dass es auf natürlichem Wege keine zwei Benutzer mit der gleichen Session gibt.

Diese Nummernbuchstabenkombination, welche entscheident ist, kann man auf verschieden Arten herausfinden. Damit wäre es möglich auf die Daten, welche in einer Session gespeichert wären zuzugreifen.

Zwischen den einzelnen Seiten wird die Session ( SID ) entweder per Cookie, Post oder Get übertragen.

Die Daten einer Session werden im PHP eigenen temporären Ordner gespeichert, oder in einem beliebigen anderen Pfad auf dem Server, dedingt durch die Einstellungen. Auf diesen kann man in der Regel nicht zugreifen.


Soweit mein Wissen zum Thema, nun einige Möglichkeiten zum Thema Sicherheit, welche mir spontan einfallen:

IP Adresse: Ermitteln, in der Session speichern und bei jedem Seitenaufruf prüfen.

Session Lifetime: Je nach Seiteinhalt sollte in relativ geringer Wert gewählt werden, so dass die Session nicht Stunden später nach ansprechbar ist. Alternativ kann man auch die Zeit speichern, wenn die Session zum ersten initialisiert wird und später einen Vergleich mit der aktuellen Zeit durchführen und je nach Ausgang die Session neu starten.

Sessionübertragung: Nur das Speichern der Session in einem Cookie erlauben. So kann legentlich der entsprechende Computer die Session nutzen. Natürlich ist dies eine Gefahr für bei Mehrpersonensystemen.

SSL: Hierbei handelt es sich ja bereits um eine Sicherheitsmaßnahme, habe jedoch auch gelesen, dass dies im Bezug auf Sessions nützlich sein soll.

Benutzerdaten: Man kann natürlich eine ganze Reihe von Daten des Nutzers ( Browser, OS, IP etc. ) speichern und bei jedem Abruf prüfen.


Über Sinn und Unsinn kann man sich streiten - Es ist ein Resultat einiger Minuten des Denkens, dies ist jedenfalls mein Betrag zu diesem Thema

Creator 28.11.2003 17:55

mit einiges inis und co kann mann das session system sehrgut benutzen!

man sollte es allerdings mit einem ip check verbinden.

ich benutzen derweil folgende inisets:
PHP-Code:

    ini_set "session.save_handler""user" );
    
ini_set "session.serialize_handler"$session_serialize_handler );
    
ini_set "session.gc_probability"$session_gc_probability );
    
ini_set "session.gc_maxlifetime"$session_gc_maxlifetime );
    
ini_set "session.referer_check"$session_referer_check );
    
ini_set "session.entropy_file"$session_entropy_file);
    
ini_set "session.entropy_length"$session_entropy_length );
    
ini_set "session.use_cookies"$session_use_cookies );
    
ini_set "session.use_trans_sid"$session_use_trans_sid );
    
ini_set "session.url_rewriter.tags "$session_url_rewriter_tags );
ini_set "session.use_only_cookies"$session_use_only_cookies );
    if(
version_compare(phpversion(), "4.2.0"">=")) session_cache_expire ($session_cache_expire);
    
session_set_cookie_params $session_cookie_lifetime,$session_cookie_path,$session_cookie_domain,$session_cookie_secure);
    
session_cache_limiter($session_cache_limiter); 


Creator 28.11.2003 18:04

mhm... dann hätte ich ein problem.
habt ihr ne andere lösung?

DaddyCool 28.11.2003 18:07

Zitat:

Original geschrieben von ciruZ
Und wenn du MySQL Zugriff hast interessieren dich bestimmt nicht die Sessions ;)...
Wenn du an die Dateien rankommst werden dich Sessions auch kaum interssieren, behaupte ich jetzt mal.

Reimer hat schon recht, lass uns uns gegenseitig mit Fakten bewerfen.

Fakt 1: Man kann selbst bestimmen wo die Sessions gespeichert werden. Den Pfad kann man mittels session_save_path() bestimmen.

Fakt 2: Wie Reimer schon gesagt hat muss man sich selbst darum kümmern und überprüfen ob der User zur Session gehört oder nicht. Jedoch ist dies bei einem eigenen System nicht anders.

Fakt 3: ich bin mir jetzt nicht ganz sicher, aber Reimer weiß dies ggf., aber unter Confixx (welches ja sehr beliebt ist bei Hostern) wird für jeden Benutzer ein extra tmp Verzeichnis angelegt. In diesem sollten auch die Session Daten landen. Andere Nutzer haben auf dieses Verzeichnis normalerweise kein Zugriff.

Nunmal zu dem selbst bestimmen der SID: Wer Sessions ernsthaft einsetzt überprüft normalerweise ob en User zu der Session gehört oder nicht. Wenn nicht kriegt er halt ne neue ID, ich seh da jetzt wirklich kein Problem drin.

Zitat:

Original geschrieben von Creator
mhm... dann hätte ich ein problem.
habt ihr ne andere lösung?

Du kannst einen Teil der Daten in der Session selbst speichern und dann überprüfen

Björn 28.11.2003 18:18

Zitat:

Original geschrieben von DaddyCool
Du kannst einen Teil der Daten in der Session selbst speichern und dann überprüfen

was ja wohl letztendlich die beste möglichkeit scheint.
ich speicher mir folgendes ab:
md5($_ENV["HTTP_USER_AGENT"].$_ENV["HTTP_HOST"].$_ENV["REMOTE_ADDR"])

mfg

Björn 28.11.2003 18:40

wie soll das denn bitte aussehen und wie umgehst du die sicherheitslücken die du ja im session system von php siehst?

Björn 29.11.2003 11:51

haha witzbold

nur wie willst du die session eindeutig zuordnen?????
mfg

Frederic Schneider 29.11.2003 13:55

ciruZ anstatt so rumzumachen sag ihm entweder jetzt wie du es genau machst oder lass es hier im Thema etwas zu schreiben.

Ich meine das jetzt nicht böse, aber es nervt irgendwie :D.

Zum Thema:
Ich habe keinerlei Probleme mit den PHP Sessions, mit ein paar Modifikationen passt das schon :D.

Björn 29.11.2003 14:49

nö sagt ja keiner
nur ich seh keinen eindeutigen weg einen benutzer zu identifizieren!
ip adresse is essig => proxys etc
cookie auch da einige leute keine akzeptieren

zu dem pasten: wir könnten uns irgendwann dein forum saugen und abschaun :rolleyes:
aber ich interessiere mich nicht für den code sondern für eine lösung dieses von dir ja so ziemlich groß dargestellten problem das php session system zu nutzen!
schliesslich will ich meinen benutzern eine gewisse sicherheit bieten!

mfg

TRS 29.11.2003 15:22

Zitat:

Original geschrieben von trashar
nö sagt ja keiner
nur ich seh keinen eindeutigen weg einen benutzer zu identifizieren!
ip adresse is essig => proxys etc
cookie auch da einige leute keine akzeptieren

Nun ja, Sicherheit und Benutzerfreundlichkeit lassen sich nicht vereinbaren. Man muss immer irgendwie ein Mittelmaß finden. Wenn der Nutzer keine Cookies erlaubt, ist die Sicherheit nicht mehr gewährleistet und der Nutzer wird ausgeschlossen. Leider.

Ansonsten würde ich mich auch freuen, wie du, CiruZ, das ganze gelöst hast. Anscheinend hast du ja eine gute Lösung gefunden und kannst ja dann mal beschreiben, wie du das umgesetzt hast.

DaddyCool 29.11.2003 15:47

Super, du hast grad beschrieben wie jedes Session System in Foren funktioniert.

Was aber alle wissen wollen, wie gehst du auf Nummer sicher das einem Benutzer auch die angesprochene Session gehört??

TRS 29.11.2003 17:12

Und kannst du jetzt erklren, wo der Vorteil von deiner Variante zu dem Sessionsystem von PHP ist, denn davon hast du kein Wort gesagt.

DaddyCool 29.11.2003 17:15

Mich würde zusätzlich noch interessieren was für Daten bei dir in der Session landen und wie du es schaffen willst das jeder Benutzer deines Systems keine URLs weitergibt in denen die SID steht.

Björn 30.11.2003 02:36

ich muss reimer ma zustimmen...

mfg

btw:

http://forum.powerteq.net/forum.php?...7d123405a74444 <-- wird ja doch mitgegeben o_O
mfg

Björn 30.11.2003 11:42

also bei mir wird automatisch überprüft ob die session per cookie gespeichert wird oder nicht und dementsprechend die session angehängt oder nicht..
mnfg

Björn 30.11.2003 12:52

naja php macht das ja automatisch mit der session über cookie oder halt link...
mfg

TRS 30.11.2003 17:32

Kannst du doch selber beeinflussen, wie das übergeben wird. Ist ja nicht so die große Kunst.

DaddyCool 30.11.2003 19:54

@ciruZ
Wenn ich mir die Beiträge so durchlese ist im pbb ein Session System welches genauso arbeitet wie das von PHP. Warum also ein eigenes schreiben?? Das wird mir immer noch nicht klar.

Die Systeme die ich kenne und ein eigenes Session System integriert haben, nutzen es um die höchstmögliche Sicherheit zu gewährleisten und überprüfen Daten wie IP, Browser usw., direkt bei der Abfrage, aber soetwas gibts ja scheinbar bei dir nicht.

Du hattest angesprochen das es mit Proxys Probleme geben kann. Dazu möchte ich nur anmerken das die meisten Proxy Server die korrekte IP übergeben, und zwar in der Variable $_SERVER['HTTP_X_FORWARDED_FOR'] und ich behaupte jetzt einfach mal das die meisten Benutzer die Proxys ihres Hosters nutzen und wenn jemand schon nen anonymen Proxy nutzen muss, ist er entweder paranoid oder hat etwas ausgefressen, und so einen möchte man ja nicht unbdingt als Nutzer haben.

Ach ja, ich hätte gern ein paar Bugs im PHP Session System genannt, da du sie ja schon mehrmals erwähnt hast wirst du sie ja kennen.

DaddyCool 30.11.2003 21:22

Zitat:

Original geschrieben von ciruZ
@DaddyCool:
Ich habe schon ne Menge Bugs aufgelistet, lies mal.

Ähm, ich glaub ich bin zu blöd dazu, aber ich finde in keinem deiner Beiträge die Nennung eines Bugs.

Das einzige was entfernte Ähnlichkeit mit einem Bug hat ist das Phänomen das man selbst bestimmen kann wie die SID lauten soll. Das dieses Verhalten aber so korrekt ist habe ich ja bereits erläutert. Denn auch wenn "abc" ein wenig kurz ist, ist es doch eine korrekte SID.

Das mit dem Browser war nur ein beispiel, denn dies habe ich jetzt schon öfter in Session Systemen gesehen.

DaddyCool 06.12.2003 12:26

Zitat:

Original geschrieben von ciruZ
Ok, das hier hast du dann wohl übersehen:
- Bei vielen alten Versionen ist es möglich den Sessin Inhalt zu kriegen. Und du weißt ja nie, welche PHP Version der jenige einsetzt. Sicherer ist es also, ein eigenes zu schreiben, SQL basiert.

Konfigurationssache. PHP hat seit Version 4.0.0 die Funktion session_save_path() integriert. Im übrigen kann der Server Admin jeden Benutzer ein Extra Verzeichnis zuweisen. Confixx macht es vor.

Genauso könnte er Serveradmin aber jeden Benutzer den Zugriff auf jede DB geben.

Zitat:


- Die Übergabe der SID funktioniert oft nicht richtig. Es wird z.B. eine Cookie gesetzt obwohl der Browser es gar nicht kann etc.

verdammt. Das hellsehen muss man PHP in der Tat noch beibringen, das ist wirklich ein Security Bug.

Woher soll PHP wissen ob ein Browser Cookies annimmt oder nicht wenn es das nicht probiert??

Zitat:

- Generell wird manchmal so ein Schrott produziert, dass einige Browser gar nicht mehr mit klar kommen. Besonders bei alten PHP Versionen.

beispiele??

DaddyCool 06.12.2003 12:39

Zitat:

Original geschrieben von ciruZ
Woher PHP das wissen soll? Einfach erstmal beides machen!
Wenn er dann merkt, dass das Cookie da ist, kann er beim nächsten mal die SID einfach aus der URL raus lassen.
Standardmäßig Cookies ist dämlich! Wenn dann standardmäßig über URL!

Aber dann setzt er doch ein cookie auch wenn der Browser keine annimmt, ich denke das willst du nicht.

DaddyCool 06.12.2003 13:03

Zitat:

Original geschrieben von ciruZ
Was ich nicht will ist, dass er ein Cookie setzt und nur das macht - und das macht php standardmäßig.
Ich will, dass erstmal die SID in der URL ist und im Cookie. Beim nächsten laden weißt du ja, ob das Cookie noch da ist - OHNE das du ausgeloggt wurdest.
Aber bei nem Forum ist das nicht so sinnvoll wenn es jeder einstellen kann. ;)

Und auch wieder antworte ich: Konfigurationssache.

Du kannst PHP so konfigurieren das er genau das gewünschte Verhalten aufweist.

Man aktiviere dazu nur: session.use_trans_sid

DaddyCool 06.12.2003 13:14

Zitat:

Original geschrieben von ciruZ
Das ist klar, aber was, wenn ini_set deaktiviert ist? Ich glaube, dann hast du ein Problem :P...
Das sollte dr Coder mitdenken und die Werte selbst an eine URL anfügen, anders macht man es bei einem eigenen System ja auch nicht.

DaddyCool 06.12.2003 13:26

Zitat:

Original geschrieben von ciruZ
Und dann entstehen Sachen wie sid=blabla&sid=blabla was auch wieder sehr toll ist und nicht grade sauber ;)...
Seit PHP3 gibt es get_cfg_var() mit dem man Überprüfen kann wie php konfiguriert ist.

DaddyCool 06.12.2003 17:23

Das mag sein, aber um mal auf die eigentliche Frage zurückzukommen: Was für Security Bugs??

DaddyCool 06.12.2003 19:02

Zitat:

Original geschrieben von ciruZ
Wurden doch schon größten teils genannt.
Dann zähl sie bitte nochmal auf

Zitat:


Wenn dir das immer noch nicht reicht such mal auf php.net ;)

Hab ich doch glatt mal gemacht und den Bug Tracker durchsucht, und es gab tatsächlich mal einen wirklichen Security Bug in PHP (nicht das was du dafür hälst, die tauchen aber auch oft auf). Dieser wurde aber nach der Beta 2 von PHP 4 gefixed.

TRS 07.12.2003 09:10

Also,

ich frage mich jetzt eines. Wenn in deine Augen Fehler in älteren PHP Versionen bereits ein Kriterium sind um ein eigenes Sessionsystem zu programmieren, wie gehst du dann mit anderen Sicherheitslücken eines Webservers um?

Abgesehen davon, wer sagt das dein Sessionsystem sicherer ist. Sofern dein Forum irgendwann als Download verfügbar sein wird, finden sich auch dort Sicherheitslücken.

DaddyCool 07.12.2003 09:36

Zitat:

Zitat von ciruZ
Tja, siehst du, in jeder Version gabs irgendwo nen Bug. Und woher willst du wissen, das der Webhoster nicht grade diese verwendet? In späteren Versionen waren auch noch Sachen.

Weil diese Version schon seit laaaangem veraltet ist, wie gesagt, es war die Beta 2 von PHP4, und das Webhoster immer darauf bedacht sind ihren Benutzern eine möglichst aktuelle Version zu bieten, dürfte diese nicht mehr im Einsatz sein.

Und was war in späteren Versionen?? Du sagst immer, es war was, es ist was drin, nun nenn doch endlich mal etwas. Ansonsten bestätigst du nur meine Meinung, das du eine Rechtvertigung für ein eigenes Session System brauchst, und es in deinem fall keinen wirklichen grund dafür gibt.

DaddyCool 07.12.2003 10:37

Zitat:

Zitat von ciruZ
Wenn du unbedingt das PHP Sessionsystem verwenden willst, verwende es. Aber mecker nicht, wenn es dann nachher nicht so funktioniert wie du willst.
Mein Session System brauch ich nicht rechtfertigen, denn da ich sowieso WIW hab ist es sinnvoller.

Dem entnehme ich du kennst keine Security Bugs im PHP Session System, denn um die Nennung derer drückst du dich ja schon die ganze Zeit. Mehr wollte ich gar nicht wissen.

Du hast übrigends vergessen auf die Frage von reimer zu antworten.

Björn 07.12.2003 10:39

wiw?
also ich benutzt das php session sys und muss sagen das ich keine probleme damit habe..
mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25