Ankündigung

Einklappen
Keine Ankündigung bisher.

URL Token in zweiten Cookie

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • URL Token in zweiten Cookie

    Hallo

    Aktuell prüfe ich bei jeder Anfrage an den internen Bereich ob die URL einen Token hat und ob er in der Session enthalten ist.
    PHP-Code:
     if(!isset($_GET['token']) || !isset($_SESSION['token']) || ($_GET['token'] != $_SESSION['token']))     
        
    //angefragten controller ausführen 
    else     
    //login controller ausführen 
    token = 48 Zeichen

    Eine Zuordnung von User und Session/Token erfolgt nicht.

    Bisher habe ich nur sehr selten ajax verwendet und damit kaum Probleme. Als ich jetzt mein System etwas überarbeitet habe und den Content-Bereich hauptsächlich über Ajax aufbaue, habe ich natürlich ein Problem, wenn die Session abgelaufen ist.

    Folgende Probleme habe ich jetzt
    - Alle Links (auch Menü) enthalten einen &token=48 Zeichen
    - Änderungen die nicht vor Ablauf der Session gespeichert wurden, sind verloren
    - Eine abgelaufene Session führt dazu, dass die Login-Seite im Content-Bereich geladen wird

    Mein Ansatz wäre jetzt:
    - Session mit 32 Zeichen (Cookie)
    - KeepAlive-Cookie mit 48 Zeichen (z.B. 6h)
    - Datenbankeintrag mit UserId, TimeOfLive, Token und Hash aus Token und KeepAlive

    Wird eine Anfrage mit einem Token und KeepAlive gemacht, wobei KeepAlive nicht zum Hash passt, wird der Eintrag aus der DB gelöscht und man muss sich neu anmelden. Somit hat man genau einen Versuch sich Zutritt zum System zu verschaffen und muss dabei 96 richtige Zeichen übergeben.

    Hab das mal schnell verpackt.

    PHP-Code:
      if(isset($_GET['token']) && isset($_SESSION['token']) && ($_GET['token'] == $_SESSION['token'])){

        
    $user $_SESSION['userId'];

        
    //nach 10 Minuten wird keepAlive verlängert um nicht bei jedem Request einen neuen Cookie zu setzen
        
    if($_SESSION['keepAlive']+600 time()){
            
    $keepAlive token(48);
            
    setcookie('keepAlive',$keepAlive,strtotime("+6 hours"),ini_get('session.cookie_path'), ini_get('session.cookie_domain'),true,true);
            
    $db->setKeepAlive($user,$keepAlive,$_SESSION['token']);
        }

    }else if(isset(
    $_GET['token']) && (isset($_GET['keepAlive']) && $_GET['keepAlive'] == true) && isset($_COOKIE['keepAlive'])){

        
    //In Bereichen wo Eingaben / Änderungen gespeichert werden sollen, wird über die URL keepAlive bestätigt
        
    $result $db->getUserByKeepAlive($_GET['token'], $_COOKIE['keepAlive']);

        if(
    $result){
            
    $_SESSION['userId'] = $result['user_id'];

            if(
    $_SESSION['keepAlive']+600 time()){
                
    $keepAlive token(48);
                
    setcookie('keepAlive',$keepAlive,strtotime("+6 hours"),ini_get('session.cookie_path'), ini_get('session.cookie_domain'),true,true);
                
    $db->setKeepAlive($result['user_id'],$keepAlive,$_SESSION['token']);
            }

        }else{
            
    $db->deleteKeepAlive($_GET['token']);
            
    //Weiterleitung zu login
        
    }

    }else if(isset(
    $_COOKIE['keepAlive']) && isset($_GET['token'])){

        
    $db->deleteKeepAlive($_GET['token']);
        
    //Weiterleitung zu login

    }else{

        
    //Weiterleitung zu login,


Lädt...
X