WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Internet (http://www.wcm.at/forum/forumdisplay.php?f=8)
-   -   sicherheitsrisiko: use_trans_sid ? (http://www.wcm.at/forum/showthread.php?t=143404)

Potassium 30.08.2004 18:41

sicherheitsrisiko: use_trans_sid ?
 
servus
ich hab mal ne frage.
wie hoch stuft ihr das sicherheitsrisiko ein, wenn man session.use_trans_sid bei php aktiviert hat?
ich bräuchte es damit man sich auch einloggen kann wenn man keine cookies akzeptiert.
was meint ihr, risikiere ich da viel?

Sloter 30.08.2004 19:28

Also ich würde eher den Weg gehen, die ID in eine DB zu schreiben und von dort auszulesen für die Weiterverarbeitung.
Die Session bleibt sonst ewig am Leben :-)

Bin mal gespannt, was die Profis meinen :)

Sloter

Potassium 30.08.2004 19:42

Zitat:

Original geschrieben von Sloter
Also ich würde eher den Weg gehen, die ID in eine DB zu schreiben und von dort auszulesen für die Weiterverarbeitung.
Die Session bleibt sonst ewig am Leben :-)

Bin mal gespannt, was die Profis meinen :)

Sloter

wenn du mir verräts wie ich die sessionid vom browser OHNE cookie zum server schicke dann gerne.
mir fällt dazu aber keine (einfache) lösung ein.

Sloter 31.08.2004 10:09

Es gibt 2 Systeme, also auch 2 Sessions. Man programmiert nun entweder eine Pipe, wo alle Daten verschlüsselt per GET (bis 1024Byte) oder POST (je nach Einstellung am Server) übergeben werden. Oder man legt alle Daten in einer Datenbank ab und übergibt nur die Session-ID, welche bei jedem Datensatz mitgespeichert wird. Die Session-ID verschlüsselt man z.B. mit RSA und schon ist es sicher.

Sloter

Potassium 31.08.2004 12:16

das wäre das drumherum nur mein prob is wie sende ich die id immer per get mit? und zwar nur dann, wenn der client KEINE cookies nimmt, da anonsten die sessionid eh mit dem cookie gesendet wird.

käptn 31.08.2004 14:44

Das kommt ganz darauf an...

Bei einem Forum ist es sicher nicht so tragisch wie bei einem WebShop oder WebMailer.

Worauf man achten sollte:

Nach dem Login die Session-ID mit session_regenerate_id() neu erzeugen.

Externe Links über ein Redirect-Script laufen lassen, welches die Session-ID "schluckt".

Bleibt immer noch die Möglichkeit, dass der User die URL einfach aus der Adresszeile kopiert.

Wie kann man jetzt sicherstellen, dass die Session dem Benutzer gehört, der sie aufruft?

... gar nicht.

Ein Check des User-Agents ist sogar verlässlicher als die IP...

Soll es wirklich sicher sein, wirst du um SSL nicht herum können.

Ob unser alkalischer Freund die Session-Daten jetzt in der DB speichert oder nicht, ist eher Geschmackssache, da sich dabei höchstens Spionage am Server etwas eindämmen läßt. :)

~

Potassium 31.08.2004 14:56

session_regenarte_id() muss ich ausprobieren klingt aber gut :)
ad externe links:
ich weiß nicht was du genau meinst aber bei mir haben externe links keine session_id drangehängt.

user agent ist doch nur ne agabe über den browser oder?

ajo und es wird kein webshop sondern ich möcht nur verhindern, dass jemand ohne größere schwierigkeiten admin-rechte etc auf meiner seite erwirbt.

käptn 31.08.2004 15:36

Zitat:

Original geschrieben von Potassium
ad externe links:
ich weiß nicht was du genau meinst aber bei mir haben externe links keine session_id drangehängt.

...aber der Refer(r)er

~

Potassium 31.08.2004 15:43

Zitat:

Original geschrieben von käptn
...aber der Refer(r)er

~

ajo.
und wie kann ich ausm referer was entfernen?
bzw wie genau wird mir der gefährlich?

käptn 31.08.2004 16:00

Sieh dir mal eine Apache AccessLog Datei an.

redirect.php
PHP-Code:

<?php
require_once 'HTTP.php';

if (isset(
$_GET['PHPSESSID']))
    
HTTP::redirect('?url='urlencode($_GET['url']));

HTTP::redirect($_GET['url']);
?>

~

Potassium 31.08.2004 18:06

1.) woher nehm ich die HTTP.php
2.) wie bau ich die redirect.php ein
3.) kann ich die sessions nicht anders validieren?

käptn 31.08.2004 18:41

1.) http://pear.php.net/package/HTTP
2.) WCM
3.) wäh? :)

~

Potassium 31.08.2004 19:11

Zitat:

Original geschrieben von käptn
1.) http://pear.php.net/package/HTTP
2.) WCM
3.) wäh? :)

~

asooooooooo nun check ich erst welchen referer du meinst :lol:
dachte zuerst den AUF meine seite (also von einer andren):confused:
im prinzip macht dieses script nix außer einen http-location header zu senden oder?

btw: ich prüf die sesssion nun bei jedem seitenaufruf auf IP, User Agent und ob sie noch nicht abgelaufen ist.
schlägt ein check fail, wird die session gelöscht und eine neue erstellt.

käptn 31.08.2004 20:02

Es gibt Provider, die ändern die Client-IP sekündlich...

~

Potassium 31.08.2004 20:08

Zitat:

Original geschrieben von käptn
Es gibt Provider, die ändern die Client-IP sekündlich...

~

??????????
was?
wieso das?
afaik prüfen aber die "großen" foren wie phpBB und vBulletin die sessions ebenfalls mittles IP.
was passiert in den foren mit solchen benutzern?

Potassium 31.08.2004 20:40

ich verzweilfe noch :(
irgendwie muss hinter dem pear script doch mehr stecken als ein header().
nur was genau macht es aus, dass der referer nicht mit gesendet wird?

Potassium 01.09.2004 02:33

so ich bin jetzt beinahe 10 stunden dran gesessen.
wenn die sessionid nicht folgende 3 checks erfolgreich absolviert, wird dem benutzer eine neue sessionid zugewisen. somit wird die aktuelle nicht beschädigt, und der nutzer hat trotzdem keinen zugriff auf die session:
1.) IP-Check
2.) User-Agent-Check
3.) "Ablauf"-Check d.h. wenn die session seit einer bestimmten zeit nicht "aufgefrischt" wurde ist sie undültig und wird zerstört.

das einzige was nun noch fehlt is der referer *ächz*:eek:

flocky 01.09.2004 03:25

Zitat:

Original geschrieben von Potassium
3.) "Ablauf"-Check d.h. wenn die session seit einer bestimmten zeit nicht "aufgefrischt" wurde ist sie undültig und wird zerstört.
freue mich ein primitives wenn auch effektives kontribut zu der problemstellung geleistet zu haben :D

Potassium 01.09.2004 23:00

hab jetzt folgenden check:
Code:

if($_SESSION['Expire'] < time() or $_SESSION['User_IP'] != $IP or $_SESSION['Agent'] != $_SERVER['HTTP_USER_AGENT'] or  checkreferer() != True){               
                session_write_close();
                session_start();               
                logout();
               
                $_SESSION['Expire'] = time() + $config['Session_Length'];
                $_SESSION['User_IP'] = $IP;
                $_SESSION['Agent'] = $_SERVER['HTTP_USER_AGENT'];                       
}

logout() löscht die ganzen session vars.
checkreferer():
Code:

function checkreferer(){       
        if(isset($_SERVER['HTTP_REFERER'])){
                $referer = parse_url($_SERVER['HTTP_REFERER']);
                if($referer['host'] != $_SERVER['HTTP_HOST']){                       
                        return FALSE;
                }
                else{
                        return TRUE;
                }
        }
        else{
                return TRUE;
        }
}

reicht das?

Potassium 02.09.2004 20:51

kann mir bitte jemand erklären was der "zaubertrick" in dem http-pear-script ist, dass der referer nicht mitgesendet wird?
ich schnalls einfach ned.......


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag