[PHP] Autologin-Funktion

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von finke, 13.04.2011.

  1. #1 finke, 13.04.2011
    Zuletzt bearbeitet: 13.04.2011
    finke

    finke Eroberer

    Dabei seit:
    05.07.2007
    Beiträge:
    63
    Zustimmungen:
    0
    HI, habe mir eben mal eine Autologin Funktion überlegt. Ich weiß zwar, das solche Funktionen zum teil, gerade im Web, argwöhnisch beliebäugelt werden, trotzdem hätte ich gerne einmal Meinungen und Verbesserungsvorschläge von den Forennutzern gehört.

    PHP:
    <?php
    /* iwo gefunden, vertrau der for schleife nicht ganz.
    Muss mir mal noch was richtiges suchen um Zufallszahlen mithilfe von /dev/urandom zu finden
    if(!function_exists('getRandom')){
    function getRandom($min, $max) 
    {
        $bits = '';
        $diff = $max-$min;
        $bytes = ceil($diff/256);
        $fp = @fopen('/dev/urandom','rb');
        if ($fp !== FALSE) {
            $bits .= @fread($fp,$bytes);
            @fclose($fp);
        
        $bitlength = strlen($bits);
        for ($i = 0; $i < $bitlength; $i++) {
            $int =  1+(ord($bits[$i]) % (($max-$min)+1));
        }
        }
        else{
        //wird benoetigt, falls /dev/urandom nicht exitiert (Windows) oder nicht geoeffnet werden darf
        $int = mt_rand($min, $max);
        }
        return $int;
    }
    }
    /**/
    if(!function_exists('descripeServer')){
    /**
     *Funktion, welche einen String zuruek gibt, der den Server beschreibt
     *Wird genutz, um zu verhindern, das der Cookie auf einem anderen System entschlüsselt werdne kann
     *(Unzuverlessig, wenn ein Angreifer das genaue System kennt)  
     *@return string
     **/
    function descripeServer(){
    $string '';
    $string .= $_SERVER['SERVER_NAME']; 
    $string .= $_SERVER['DOCUMENT_ROOT'];
    $string .= $_SERVER['SERVER_SOFTWARE'];
    $string .= phpversion();
    return 
    $string;
    }
    }

    //Erst mal pruefen, ob ich nicht zu dusselig war, und meine eigenen Funktionsbiblioteken 2 mal einbinde
    if(!(function_exists('autoLogin') || function_exists('readAutoLogin'))){
    //verschluesselungbibliotek

    include("blowfish/blowfish.class.php");

    //Funktion zum anlegen des cookies
    function autoLogin($userID$passwdHash$gueltigkeit NULL$saltLenght 16){
    //Wenn der Header bereits gesendet wurde, kann diese funktion nichts mehr machen, und gibt einen fehler zurueck
    if(headers_sent()) return false;
    // Wenn keine Gueltigkeit angegeben, wird von 14 Tagen ausgegangen
    if($gueltigkeit === NULL || !is_int($gueltigkeit) || $gueltigkeit<0$gueltigkeit time()+60*60*24*14;
    //Salt erzeugen
    // Alle Zeichen die er fuer die Bildung eines salts verwenden darf.
    // Der Doppelpunkt ist nicht enthalten, da dieser als Trennzeichen dient. 
    $saltPool 'abcdefghijklmnopqrstuvwxyz';
    $saltPool .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $saltPool .= '-_.,;#+*~!"§$%&/()=?ß\}][{<>|';
    $saltPoolLeght strlen($saltPool); 
    $salt '';
    for(
    $i 0$i<$saltLenght$i++){
    $salt.=$saltPool[mt_rand(0,$saltPoolLeght-1)];
    // $salt.=$saltPool[getRandom(0,$saltPoolLeght-1)];

    }
    //Verschluesseln der daten mithilfe des Serverstrings und des salts
      
    $blowfish = new Blowfish($salt.descripeServer());
       
    $cookie $salt.':'.$blowfish->Encrypt($userID.':'.$passwdHash);
       
    //jetzt noch das eigentlcihe Cookie setzen
       
       
    return setcookie ('autoLogin'$cookie$gueltigkeit'','',false ,true);
    }

    //Funktion zum pruefen ob der User autologin aktiviert hat
    // und ob die Daten gueltig sind
    function readAutoLogin(&$userID, &$passwdHash){
    $userID NULL;
    $passwdHash NULL;
    // als erstes nachschaun, ob ein Cookie gesetzt ist
    if(!isset($_COOKIE['autoLogin'])) return false;
    $cookie $_COOKIE['autoLogin'];
    //trennt den Salt von den verschluesselten Informationen  
    $cookie explode(':'$cookie2);
    // wenn der salt nicht sauber getrennt werden konnte abbrechen
    if(empty($cookie) || empty($cookie[0]) || empty($cookie[1])) return false;
    //Anlegen einer verschluesselungsklasse, mit einem Schluessel aus salt und Serverbeschreibung
    $blowfish = new Blowfish($cookie[0].descripeServer());
    $tmp explode(':'$blowfish->Decrypt($cookie[1]), 2);
    //wenn das was entschluesselt wurde nicht irgendwie dem aehnlich sieht, was gesucht wurde, abbrechen
    if( empty($tmp) || empty($tmp[0]) || empty($tmp[1]) || !is_numeric($tmp[0]) ) return false;

    //wenn er es bis hirhin geschaft hat, noch schnell die Daten uebergeben, und Erfolg melden
    $userID $tmp[0];
    $passwdHash $tmp[1];
    return 
    true;
    }
    }
    ?>
    Hir nochmal der Komplette Quelltext samt Beispiel:
    Den Anhang autologin.tar.bz2 betrachten

    Die Funktionen regeln nur die sichere Übermittlung der Daten, Sie schreibt in keiner Weise vor, wie diese dann ausgewertet werden.

    Nachtrag:
    PHP:
    75:$cookie $salt.':'.$blowfish->Encrypt('Erfolg:'.$userID.':'.$passwdHash);
    94:if( empty($tmp) || empty($tmp[0]) || empty($tmp[1]) || empty($tmp[2]) ||$tmp[1] != 'Erfolg' || !is_numeric($tmp[1]) ) return false;
    Der statische String vor den Daten dient dazu, zweifelsfrei sicherzustellen, das die daten mit dem richtigen Schlüssen entschlüsselt wurden.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

[PHP] Autologin-Funktion

Die Seite wird geladen...

[PHP] Autologin-Funktion - Ähnliche Themen

  1. [PHP] file_exists und scandir, mal gehts mal nicht

    [PHP] file_exists und scandir, mal gehts mal nicht: HI, Ich habe zZ ein ein Problem mit den oben gennanten Funktionen. Ich sehe gerade nicht durch, in welchen Verzeichnissen diese Funktionen alles...
  2. [PHP] Session-Authentifizierung zentralisieren

    [PHP] Session-Authentifizierung zentralisieren: Hi, ich prüfe auf jeder geschützten Seite ob der enutzer befugt ist diese zu sehen oder nicht mittels: <?php session_start(); $hostname...
  3. [PHP] Checkboxen-Auswahl + dazugehörige Werte in Array

    [PHP] Checkboxen-Auswahl + dazugehörige Werte in Array: Hi, ich habe mit checkboxen eine Liste erstellt, aus der verschiedene Gegenstände durch Haken setzen markiert werden können. Über einen...
  4. [PHP]Passwortschutz für Verzeichnisse

    [PHP]Passwortschutz für Verzeichnisse: Hi, ich hätte gerne auf meinem Webserver, dass auf der Startseite der Benutzername und das Passwort angegeben werden müssen und man sich so...
  5. [PHP] Sortieren

    [PHP] Sortieren: Könnt ihr bitte helfen? Ich bekomme es einfach nicht hin.. :( Zum Problem: ich möchte die Bilder die dieses Script ausgibt nach dem...