php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 23-12-2008, 16:35
Chrissi007
 Registrierter Benutzer
Links : Onlinestatus : Chrissi007 ist offline
Registriert seit: Jul 2004
Beiträge: 49
Chrissi007 ist zur Zeit noch ein unbeschriebenes Blatt
Chrissi007 eine Nachricht über ICQ schicken
Standard PHPSESSID: Problem mit php Session ID (Sicherheitslücke durch Link-Login?)

Hi zusammen,

Ich arbeite gerade an einem Community Login und bin am verzweifeln, weil ich ein ganz erhebliches Sicherheitsproblem entdeckt habe.

Dass php-seitig gewöhnlich beim ersten Besuch der Page dieser &PHPSESSID-Parameter an die URL angehängt wird, ist die eine Sache. Allerdings wird genau dieser Paramter bei mir zu einem ernsthaften Sicherheitsproblem.

Loggt sich ein User mittels Auto-Login ein, dann ist darauffolgend bei allen Links dieses Session ID angeben. Klickt ein User darauf, dann wird diese Session-ID logischerweiße auch in der Adressleiste angezeigt, z.B:

www.domain.de/?cmd=news&sid=abf42342cd022

ABER: Wird dieser Link beispielsweise von dem eingeloggten User in ein Forum gepostet, und ein externer Dritter greift auf diesen Link mit dieser Session ID zu, dann wird er automatisch als eben genau dieser Benutzer eingeloggt.

Ich könnte verzweifeln. Ich weiß nicht was ich dagegen unternehmen soll. Ich hab auch schon probiert mittels ...

PHP-Code:
ini_set("session.use_only_cookies""1");
ini_set("session.use_trans_sid ""0"); 
... die Ausgabe dieser Session IDs komplett zu verhindern, doch so wie es scheint machen sich diese Änderungen leider nicht bemerkbar. Die Session ID wird dennoch an die Links angehängt.

Wie entgegne ich aber dem eigentlichen Problem? Ein Link, in dem eine Session ID angegeben ist, soll nicht automatisch das Hintertrüchen sein, mit dem sich dann sämtliche nicht registriete Benutzer einloggen können.
Wie lösen dieses Problem z.B. Foren wie dieses oder das phpBB? Dort werden ja auch gelegentlich die &sids angehängt, aber zu Sicherheitsproblemen kommt es dort ja glücklicherweiße nicht.

Für jeglichen noch so kleinen Tipp bin ich echt dankbar und wünsche allen Usern des Forums ein frohes Weihnachtsfest.
__________________
Grüße, Chrissi
Our Dreams are Wings
Mit Zitat antworten
  #2 (permalink)  
Alt 23-12-2008, 16:42
lennart
 PHP Junior
Links : Onlinestatus : lennart ist offline
Registriert seit: May 2007
Ort: Hamburg
Beiträge: 565
lennart ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das ist ein generelles Problem von Sessions. Cookies kannst du theoretisch genau so "stehlen".

Binde die Session an eine IP. Sprich: Speicher die IP mit der die Session gestartet wurde in die Session und gleiche bei jedem Seitenaufruf die IP der Anfrage mit der in der Session gespeicherter IP ab. Wenn die IPs ungleich sind kannst du einfach ein session_destroy() machen.
Bedenke, dass die Session dann auch abläuft wenn sich die IP des Users ändert. Der muss sich dann also einmal neu einloggen.

Das mal ganz generell. Die SID aus der URL zu entfernen ist aber zusätzlich auch nicht so verkehrt. Da müsste ich jetzt aber auch gerade googlen.
Mit Zitat antworten
  #3 (permalink)  
Alt 23-12-2008, 17:09
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

Du kannst das eigentlich nicht verhindern, wenn es aus Absicht geschieht, ausser wie gesagt die Session an die IP zu binden und das lohnt sich nicht und ist ausserdem zu aufwendig.

Du solltest wie du bereits selbst vorgeschlagen hast Cookies benutzen, denn dann passiert es wenigstens nicht mehr aus versehen. Die Sessions kannst du ja auch noch zeitlich etwas stärker begrenzen, damm spööte doe Socjerjeit wohl ausreichend sein.
Mit Zitat antworten
  #4 (permalink)  
Alt 23-12-2008, 17:44
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.271
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Und was manchen dann die ganzen armen AOL Surfer? Die haben bei fast jedem Zugriff 'ne andere IP.

Den Cookie kann man zumindest nicht so einfach stehlen. Zumindest nicht indem man eine Seite verlinkt.
__________________
carpe noctem

Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
Mit Zitat antworten
  #5 (permalink)  
Alt 23-12-2008, 17:50
Chrissi007
 Registrierter Benutzer
Links : Onlinestatus : Chrissi007 ist offline
Registriert seit: Jul 2004
Beiträge: 49
Chrissi007 ist zur Zeit noch ein unbeschriebenes Blatt
Chrissi007 eine Nachricht über ICQ schicken
Standard

Hi,

Danke euch soweit für die Informationen.

Dieser Datenbankvergleichscheck ist für mich mehr eine Notfall-Lösung. Einerseits ist es wieder eine Datenbankanfrage mehr, und wenn ich recht überlege ist dann auch kein Auto-Login mehr möglich... vermutlich ...

in den php.net comments bin ich gerade über folgenden Eintrag gestoplert:

Zitat:
Try this code snippet, from a book by a security expert who says this is more secure to place on every page:

PHP-Code:
<?php 
session_start
(); 
$_SESSION['name'] = "YourSession"

if (!isset(
$_SESSION['initiated'])) 

    
session_regenerate_id(); 
    
$_SESSION['initiated'] = true

?>
Ich hab das gerade intensiv getestet und muss sagen, dass es eigentlich keinen Wert hat - zumindest für meinen Zweck.
Sobald eine $_GET['sid']-Session-ID in der URL übergeben wurde, dann wurden mit ihr versteckt auch sämtliche anderen Session Variablen, die zu dieser Session gehören ebenfalls angelegt. So auch das $_SESSION['initiated'].

Gibt es wirklich nur den Datenbankvergleichscheck und nicht noch eine andere Methode? Ich meine, dass man doch anders auch lösen könnte, oder?

EDIT: Weil noch mal die Sache mit den Cookies angesprochen wurde: Ich arbeite schon mit Cookies, allerdings nur zum Speichern der Autologin Funktion. Meint ihr, dass ich den Username, etc. erst gar nicht in einer Session speichern soll (z.B. $_SESSION['username'], $_SESSION['user_id']), sondern diese Werte alle direkt im Cookie ablege?
Das würde aber doch bedeuten, dass ich insgesamt in der gesamten Onlineplattform keine einzige $_SESSION-Variable benutzen dürfte, oder?
__________________
Grüße, Chrissi
Our Dreams are Wings

Geändert von Chrissi007 (23-12-2008 um 17:58 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 23-12-2008, 18:41
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

session.use_trans_sid abschalten dürfte das einfachste sein.
Ansonsten evtl. hier mal nachlesen: http://phpforum.de/forum/showthread.php?t=216531
__________________
Wir werden alle sterben
Mit Zitat antworten
  #7 (permalink)  
Alt 23-12-2008, 18:48
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

Wenn du willst, dass es möglich ist, dass der User eingeloggt bleibt (über längere Zeit) ist das bei Webbrowsern mit HTML-PHP nur mit Cookies oder der URL möglich und die URL wäre zu umständlich.
Das Cookie könnte dann aber auch von allen geklaut werden.
Das würde aber bedeuten, dass jemand Zugriff zum PC mit dem Cookie haben müsste.
Wenn du diese Funktion bereit stellen willst, dann wird dieses Problem so oder so bestehen.

Ich empfehle dir aber nicht alle diese Userdaten lokal zu speichern, denn da können sie leicht verändert werden. Die GET-Daten zu bearbeiten ist beinahe gleich einfach wie die Cookie-Daten.

Wie gesagt in deinem Fall lohnt sich das mit der IP nicht und wie goth erwähnt hat wirst du damit eher User verärgern. Ausserdem was machst du wenn plötzlich einer die IP eines anderen Users hätte?... Nicht sehr wahscheinlich, aber es ist den Aufwand nicht wert da etwas mit PHP zu machen.

Die Sessions in Cookies zu speichern wird sogar an weit heikleren Orten gemacht als bei deinem Beispiel. Z.B. bei e-Banking.

Den Sinn dieses Snippets alleine sehe ich ehrlich gesagt nicht ein, denn die alte Session wird hier nicht einmal gelöscht. Wenn schon, dann müsstest du session_regenerate_id(true); verwenden und das mit $_SESSION['initiated'] weglassen, denn das macht keinen Sinn.
Also einfach
PHP-Code:
session_start();
session_regenerate_id(true); 
Mit Zitat antworten
  #8 (permalink)  
Alt 23-12-2008, 18:51
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Dauerlogin und Sessions sind 2 völlig verschiedene paar Schuh!
Für beides sind allerdings Cookies die beste und wohl sicherste Wahl.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #9 (permalink)  
Alt 23-12-2008, 20:22
Koala
 PHP Junior
Links : Onlinestatus : Koala ist offline
Registriert seit: Jan 2006
Beiträge: 887
Koala ist zur Zeit noch ein unbeschriebenes Blatt
Standard

es gilt eben auch zu beachten,
daß der Schaden bei feindlicher Übernahme einer
Session gering gehalten wird.
So sollte das PW nicht in der Session gespeichert werdem
und grundlegende Änderungen des Accounts wie das
Ändern der Userdaten sollten mit einer erneuten PW-Eingabe
verbunden sein.
Mit Zitat antworten
  #10 (permalink)  
Alt 23-12-2008, 23:45
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
So sollte das PW nicht in der Session gespeichert werdem
Klar kannst du das, solltest es eben nur nirgendwo ausgeben
Mit Zitat antworten
  #11 (permalink)  
Alt 23-12-2008, 23:56
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Warum das Passwort in Session speichern?
Sehe keinen Grund.

Ausser, du möchtest ein evtl installiertes RootKit
(oder Domainnachbar) mit wichtigen Informationen versorgen.


__________________
Wir werden alle sterben

Geändert von combie (23-12-2008 um 23:59 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 24-12-2008, 00:31
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Warum das Passwort in Session speichern?
Sehe keinen Grund.
Das wäre natürlich die zweite Frage Aber ich meine sensible Daten generell. Ob nun in der Session oder der Datenbank, ich sehe da kein Problem, solange du sie halt nirgends ausgibst, dann kommt auch kein Schuft dran.
Mit Zitat antworten
  #13 (permalink)  
Alt 24-12-2008, 01:02
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Hmmm...
Tut weh, aber ich sags trotzdem:
Es gibt nur einen einzigen Grund ein Passwort zu speichern, "Um den User wieder zu erkennen."
Dann aber bitte in der DB oder in einer Datei mit allen anderen Usern. Und aber auch dann NUR als gesalzener Hashwert.
In Session ist das Passwort auf jeden Fall über...
In Session UND in der DB wäre redundant.

Aber andererseits hast du auch recht!
Man MUSS der DB und $_SESSION vertrauen können.
Sonst haben wir PHPler verloren.
__________________
Wir werden alle sterben

Geändert von combie (24-12-2008 um 01:05 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 24-12-2008, 01:39
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Es gibt nur einen einzigen Grund ein Passwort zu speichern, "Um den User wieder zu erkennen."
Dann aber bitte in der DB oder in einer Datei mit allen anderen Usern. Und aber auch dann NUR als gesalzener Hashwert.
Das ist mir klar. Darum gehts mir aber auch nicht.
Zitat:
Man MUSS der DB und $_SESSION vertrauen können.
Genau so ist es, darauf habe ich abgezielt.
Mit Zitat antworten
  #15 (permalink)  
Alt 24-12-2008, 15:30
Chrissi007
 Registrierter Benutzer
Links : Onlinestatus : Chrissi007 ist offline
Registriert seit: Jul 2004
Beiträge: 49
Chrissi007 ist zur Zeit noch ein unbeschriebenes Blatt
Chrissi007 eine Nachricht über ICQ schicken
Standard

Hi,

Vielen Dank und frohe Weihnachten allen! Ihr habt mir sehr weitergeholfen. Wenn ich noch mal was genaueres zu dem Thema habe meld ich mich. Klasse Community hier *lob*.
__________________
Grüße, Chrissi
Our Dreams are Wings
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:00 Uhr.