php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.05.2006, 15:16  
Gast
 
Beiträge: n/a
Standard Sessionhandling: Wie vermeide ich Außensessionübernahmen

Hallo,

ich habe folgendes Problem. Für benutzer ohne Cookies wird die SID entsprechend angehangen. Nun kann ein Besucher eine solche URL kopieren und als Link auf seine eigene Seite setzen. So far so gut.

Meine Erfahrung: Kommt ein Benutzer über einen solchen Link auf die Website und hat die Cookies aus, wird genau die in der URL.SID übertragene SessionID als die des Besuchers ggf. neu angelegt.

Problem: Übles Sicherheitsloch. Zwei Besucher, die über diese URl kommen, teilen sich eine Session.

Meine derzeitige Lösung sieht so aus, dass ich, falls eine Session zu beginnen ist, die URL analysiere und im Falle, dass eine SID darin enthalten ist, die gewünschte Seite noch einmal per Redirect aufrufe. Klappt prima!

Code:
...
elseif (strpos($_SERVER['QUERY_STRING'], session_name()) !== FALSE) # to prevent session reuse
{
	$scriptName = $_SERVER['SCRIPT_URI'];
	$parms	      = stripSID($_SERVER['QUERY_STRING']);
	$redirect      = $scriptName . whether($parms, '?' . $parms, '');
	header("Location: $redirect");
	exit;
} ...
Weiß jemand, ob (und wie) das Problem auch lösbar ist ohne einen erneuten Aufruf der Seite?

Könnt Ihr auch bestätigen, dass dieses Problem nur bei ausgeschalteten Cookies auftritt, da der Browser andernfalls sich um die übertragene SID nicht schert sondern ihn nur die Cookies-SessionID interessiert? (das zeigten zumindest meine Tests)

Thanx again
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.05.2006, 15:27  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Auch hier:
Thread verschoben:
Profi Fortgeschrittene
(lässt ja halbwegs durchblicken dass du schon länger als 2 Wochen PHP machst)
Zergling-new ist offline   Mit Zitat antworten
Alt 07.05.2006, 17:41  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Folgendes:

- Speicher doch den User-Agent in der Session, dann kannst du zumindest schonmal sagen, wem die Session gehört, bzw. wem sie ziemlich wahrscheinlich nicht gehört. Wenn die User-Agents verschieden sind, kannst du für diesen Besucher dann nämlich eine neue Session erzeugen.
- was ist denn eigentlich strpos($_SERVER['QUERY_STRING'], session_name()) !== FALSE? Macht man das nicht mit isset($_GET[session_name()])?
- was ist whether()?
- was ist so schlimm an einem internen Redirect?
- warum sollte ein Besucher einen Link mit einer SID kopieren? Wenn doch musst du das dem User eben begreiflich machen, dass damit Fremde Zugang zu seinem Account bekommen
- der Sinn der Weiche ist mir eigentlich nicht ganz klar..
Zergling-new ist offline   Mit Zitat antworten
Alt 07.05.2006, 18:01  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Zitat:
Zitat von Zergling
- warum sollte ein Besucher einen Link mit einer SID kopieren? Wenn doch musst du das dem User eben begreiflich machen, dass damit Fremde Zugang zu seinem Account bekommen
user sind oft DAUs so kann man da find ich nicht reagieren, und wer achtet da schon wenn er seinem kumpel(s) via forum, icq oder sonstwas nen link schicken will ob da ne SID drin ist ? den meisten usern ist die url sobald da ein ? drinvorkommt ein absolutes rätsel ... :P
robo47 ist offline   Mit Zitat antworten
Alt 07.05.2006, 20:08  
Gast
 
Beiträge: n/a
Standard

Zitat:
warum sollte ein Besucher einen Link mit einer SID kopieren?
robo47 hat da absolut Recht.

Ein Kunde hat in einem Subportal mit einer SID auf den Hauptshop verlinkt. Irgendwann bekam er dann eine böse E-Mail, wie erschreckend schlampig man mit den Daten umgehen würde, da er plötzlich die Daten eines anderen Benutzers sah. (Aus weiser voraussicht x-en wir Kreditkartendaten grundsätzlich teilweise aus.) Aber nun könnt Ihr sicher verstehen, dass es sicherer ist, so etwas auf jeen Fall abzufangen.

Zudem hat Google auch einige solche Links aufgenommen (kann heute nicht mehr passieren, da wir die meisten Agenten nun erkennen und reagieren).

So viel zu dieser Frage.

--------

Zitat:
Macht man das nicht mit isset($_GET[session_name()])
Yes, Sir! Ich verneige mein Haupt.

---------

Zitat:
was ist whether()?
signatur: string whether(b bool, s1 string, s2 string)
gibt s1 zurück, falls b, sonst s2. Ein iff() gibt es in PHP ja nicht.

Ich befürchte, gleich kommt von Dir: "Macht man das nicht mit ...."
Allein, ich kann nicht alle Funktionen von PHP kennen. Erst vor ein paar Tagen sah ich irgendwo nl2br(). Tja, habe ich auch schon irgendwo selbst geschrieben. Das ist so wie vor 15 Jahren mal mit Clipper.

-------

Und nun zur Deiner Hauptfrage und meinem Hauptproblem

Zitat:
was ist so schlimm an einem internen Redirect?
Eigentlich nur, dass der externe HTTP_REFERER verloren geht, es sei denn, man hängt in per GET an die Umleitung oder speichert ihn in der Session. Ersteres (URI ändern) wollte ich wegen Suchmaschinen nicht (am Ende würde Google ja noch Links mit Referer aufnehmen). Zweiteres ging zunächst nicht, weil durch die Umleitung ja eine neue Session gestartet wurde.

UNSINN hoch 10!!! Denn...

> Speicher doch den User-Agent in der Session
[ich zittiere mich selbst]
> Weiß jemand, ob (und wie) das Problem auch lösbar ist ohne einen erneuten Aufruf der Seite?

...ja natürlich. Zum Teufel, es gibt doch nichts einfacheres als
PHP-Code:
session_unset(); session_regenerate_id(); 
zu machen. Klappt auch bei session.auto_start = 1, was bei uns der Fall ist.

Ich bin auch ein Dämmel (hier schüttele ich selbst ungläubig mit dem Kopf)

Kein Wunder, dass Dir der Sinn der Weiche eigentlich nicht klar war. Wie solltest Du auch annehmen, dass ich auf so etwas grundlegendes nicht selbst komme.

Verzeiht mir!!! Ich bin einfach überarbeitet. Und wegen der auto-Einstellung benutzen wir die Session-Funktionen ja seit Jahren gar nicht mehr.

Zergling, Du hast was gut bei mir
  Mit Zitat antworten
Alt 07.05.2006, 21:30  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

was ist whether()?

signatur: string whether(b bool, s1 string, s2 string)
gibt s1 zurück, falls b, sonst s2. Ein iff() gibt es in PHP ja nicht.

.....

Ich weiß nicht was du genau meinst aber ich glaub das hier!
PHP-Code:
<?php
if ($b
{
  
$dein_wert $string1;
}
else
{
  
$dein_wert $string2;
}
?>
Ich glaube das meinst du mit iff() ... und äh das is schon bitter wenn du das nicht weißt!
Flor1an ist offline   Mit Zitat antworten
Alt 07.05.2006, 21:40  
Gast
 
Beiträge: n/a
Standard whether

Genau genommen das hier:

Code:
function whether($condition, $trueValue, $falseValue)
{
	if ($condition)
		return $trueValue;
	else
		return $falseValue;
}
Wenn man das nicht wüsste (eher könnte, hm?) würde man nicht programmieren können.

Aber Du hast das irgendwie falsch verstanden.

Das whether() ist das sonst in anderen Sprachen bekannte iff() (ich denke Visual Basic hatte so eine Funktion)

Das Thema sollten wir denke ich jetzt abschliessen.
  Mit Zitat antworten
Alt 07.05.2006, 22:01  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Gut ich versteh nu was du meinst! Gibt dafür aber schon ne Abkürzung:
PHP-Code:
<?php
$dein_wert 
$condition $trueValue $falseValue;
?>
Nur damit dus weißt dass es auch so geht
Flor1an ist offline   Mit Zitat antworten
Alt 07.05.2006, 22:24  
Gast
 
Beiträge: n/a
Standard

Ist unglaublich, was man hier während weniger Stunden an Knowhow ergänzen kann.

Ich benutze die Alternativsyntax schon sehr lange. aber bisher immer nur in der Form

(cond) ? stmt1 : stmt2;

Also ohne Rückgabewerte. Einmal so gesehen, kam ich über Jahre nie auf die Idee, das dieser Konstrukt die Werte auch zurückliefern könnte, denn ich dachte entweder statements oder values.

Wenn ich genau nachdenke, so gilt eigentlich eindeutig "values" (zwei Statements hintereinander geht ja nicht) und dass ich dabei immer nur Werte zugewiesen habe, ändert nichts daran. Man kann ja schliesslich auch schreiben

return ($r = $_REQUEST['whatever'])

Ich habe heute den Eindruck, man sieht oft vor lauter Bäume den Wald nicht. Und programmiert alles immer auf die selbe Art und Weise. Jahrelang. Weil man sich selten austauscht und selten auch fremde Codes sieht.
  Mit Zitat antworten
Alt 07.05.2006, 23:25  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von stani
Zergling, Du hast was gut bei mir
Ich weiß grad garnicht wie ich dir geholfen habe, aber manchmal hilft laut
nachdenken ja ungemein
Zergling-new ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sessionhandling with redirects, php cookie weiche, php session cookie weiche, wie vermeide ich redirect?

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.