PHP problem mit cookie-wert auslesen

koffi

Lt. Junior Grade
Registriert
Jan. 2007
Beiträge
490
hallo zusammen!

ich stehe da mal wieder vor einem problem das ich einfach beim besten willen nicht verstehe. das prinzip ist einfach. ich möchte einen cookie setzen und mir den gesetzen wert anzeigen lassen.

Code:
setcookie( 'xxx', '100001215492771', time()+3600);

Code:
echo 'cookie wert test : '.$_COOKIE['xxx'];

so weit funktioniert das super.
wenn ich jedoch zwischen dem setzen (erster code) und dem ausgeben (zweiter code) einen weiteren php script habe (mit include), wird beim anzeigen (zweiter code) eine 1 als wert angezeigt. wenn ich dieses include weglasse, wird der korrekte wert ausgegeben, also 100001215492771. das script welches ich mit inclujde dazwischen schreibe sieht so aus:

Code:
<?php

    $timestamp = time();
    $datetime = date("Y-m-d H:i:s",$timestamp) ;
     if ($_COOKIE['xxx'] =! "") {
          $cookie_request = mysql_query("SELECT * FROM `user` WHERE id = ".$_COOKIE['xxx']) or die("database request failed");
	        $cookie_row = mysql_fetch_array($cookie_request)  ;
	        
	        $time_difference = $timestamp - $cookie_row['last_login'];
	        
	        // IP adresse ermitteln
            if (! isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $client_ip = $_SERVER['REMOTE_ADDR'];
            }
             else {
              $client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
            } 
	      
        if ($cookie_row['last_ip'] == $client_ip and $time_difference <  3600 and $time_difference > 0){
        
                  $login_status = true;
        }   
     }
?>

das muss man jetzt auch nicht alles verstehen was da steht.. aber ich verstehe nicht warum diese paar zeilen die ausgabe verändern!! es wird doch nirgendswo der cookie wert verändert. mein verdacht war, dass cookies nur ein einziges mal ausgelesen werden können, was aber im grunde ja auch quatsch ist..

hat jemand eine ahnung was da vor sich geht? danke schonmal
 
Zuletzt bearbeitet:
Code:
 if ($_COOKIE['dentalcluj'] =! "") {
Das ist eine Zuweisung. Du weist dem Cookie den Wert '!""' zu, was 1 ist. Du wolltest vermutlich '!=' verwenden.
 
DAS ist eine zuweisung? :freak:
wie ich das hasse... stundenlanges fehlersuchen wegen solchen spirenzien..

ich danke dir vielmals!
 
Wundert mich, dass noch gar keiner wegen SQL-Injections gemeckert hat, wie es sonst immer der Fall ist.
 
Hinweis: Mit SQL-Injection ist das hier gemeint
Fynnjard schrieb:
Code:
          $cookie_request = mysql_query("SELECT * FROM `user` WHERE id = ".$_COOKIE['xxx']) or die("database request failed");

$_COOKIE ist ein vom Benutzer eingegebener Wert und kann quasi beliebig manipuliert werden.
 
ah verstehe. danke!
Ergänzung ()

Code:
$cookie_request = mysql_query("SELECT * FROM `user` WHERE id = ".mysql_real_escape_string($_COOKIE['xxx'])) or die("database request failed");

den wert des cookies kann der benutzer ruhig ändern, um eingeloggt zu werden, wird sowieso noch mit der ip adresse verglichen. es wäre also nur drop database eine gefahr. wäre das dann so in ordnung?
 
Zuletzt bearbeitet:
Wenn du einen (möglichen) String escapest, dann musst du ihn trotzdem noch in Quotes setzen.

$cookie_request = mysql_query("SELECT * FROM `user` WHERE id = '".mysql_real_escape_string($_COOKIE['xxx']) . "'") or die("database request failed");

Deine Schlussfolgerung mit dem DROP DATABASE ist allerdings falsch. Und dass es einem Angreifer tatsächlich darum geht eingeloggt zu werden ist eine sehr leichtfertige Vermutung. Man kann nämlich sehr viel mehr... Im Zweifelsfall nämlich auch die gesamte Datenbank auslesen. Du warst ja so nett und hast die("database request failed") gemacht wenn der Query fehlschlägt. Und das kann man ausnutzen um
ihn auf Verdacht gezielt fehlschlagen zu lassen um so andere Tabellen komplett auszulesen ;) -> blind sql injection
 
Zurück
Oben