• User

    Autenticazione su server diversi.

    Allora ho il problema.. in quanto l'applicazione mi risiede su hosting aruba e devo fare un'autenticazione su un server diverso.... basterebbe una semplice connessione oho-mysql ma aruba non permette di dialogare se non su server mysql suoi....

    Io dovrei pertanto partire da un'index.php che risiede su aruba, fare form su altro server controllare username e pasword prendere il codice fiscale se esiste l'utente e ritornare sul server aruba.
    Io ho fatto in questo modo... e vi chiedo.. se secondo voi.. sia una cosa fattibile...

    Allora nella pagina dove vado ad inserire unsername e password che sta su aruba,
    creo una random string di lunghezza 10 caratteri

    [PHP]
    function random_string($length){
    $string = "";

    // genera una stringa casuale che ha lunghezza 
    // uguale al multiplo di 32 successivo a $length 
    for ($i = 0; $i <= ($length/32); $i++) 
        $string .= md5(time()+rand(0,99)); 
    // indice di partenza limite 
    $max_start_index = (32*$i)-$length; 
    
    // seleziona la stringa, utilizzando come indice iniziale 
    // un valore tra 0 e $max_start_point 
    $random_string = substr($string, rand(0, $max_start_index), $length); 
    
    return $random_string; 
    

    }

    $random_string = random_string(10);
    $_SESSION['stringa']=$random_string;
    $_SESSION['ip']=$_SERVER['REMOTE_ADDR'];
    [/PHP]

    quindi faccio form inviando uername e password, e in hidden la stringa random e l'ip dell'utente all'altro server OK??

    A questo punto sul server cosa faccio...

    [PHP]

    //mi recupero questi dati inviati
    $usr=$_POST['usr'];
    $pwd=$_POST['pwd'];
    $str=$_POST['stringa'];
    $ip=$_POST['ip'];

    // faccio la connessione al db non aruba...

    $link = mysql_connect('localhost', 'root', 'root')
    or die('Could not connect: ' . mysql_error());
    //echo 'Connected successfully';
    mysql_select_db('database') or die('Could not select database');

    // e controllo username e password
    $query = "SELECT * FROM iscritti where username='".$usr."' and password='".$pwd."'";
    $result = mysql_query($query) or die('Query failed: ' . mysql_error());
    $row=mysql_fetch_array($result);
    $cf=$row["cf"];

    //A questo punto se username e password sono esatti cioè se il codice fiscale è pieno, visto
    //che è un campo obbligatorio, ritorno sul server aruba alla pagina ricerca.php altrimenti
    //ritorno all'index.php da dove sono partito, con un errore.

    if(isset($cf)){
    $segreta="£$%&=8()/&!56";
    $mycode=$str . $segreta . $ip;
    $mystrmd5=MD5($mycode);
    header("location:serveraruba/test/ricerca.php?code=" . $mystrmd5.$cf);
    }else{
    header("location:serveraruba/test/index.php?errore=1");
    }

    //come si vede se sono autenticato gli mando in get alla pagina un' hash che è composto
    //dalla stringa che ho inviato, da una password decisa da me e dall'ip dell'utente che ho
    //ricevuto in più attaccato gli invioo il codice fiscale in chiaro.
    [/PHP]

    Quando ricevo i dati sulla pagina ricerca.php che si trova su aruba, faccio come segue...

    [PHP]

    session_start();

    //ricevo il codice che comprende hash + codice fiscale.
    $codeAUT_cf=$_GET["code"];

    //Mi risetto anche sul server aruba la stessa password
    $segreta="£$%&=8()/&!56";

    //Mi recupero dalla sessione la stringa creata prima di inviare il tutto e l'ip dell'utente
    $str=$_SESSION['stringa'];
    $ip=$_SESSION['ip'];

    // e mi ricreo un hash allo stesso modo
    $codice=$str . $segreta . $ip;
    $mycodicemd5=MD5($codice);

    //Mi estraggo dalla stringa ricevuta solo l'hash per confrontarli
    $codeAUT = substr($codeAUT_cf, 0, 32);

    // se sono uguali sono autenticato e mi prendo il mio codice fiscale se no.. mi da errore.
    if($codeAUT==$mycodicemd5){
    echo "<H3>AUT OK!!!</H3>";
    $codice_fiscale = substr($codeAUT_cf, -16);
    echo "ECHO CODICE FISCALE ::::: " . $codice_fiscale . "<BR>";

    }else{
    echo "<H3>Errore!!!!!!!</H3>";
    }

    [/PHP]

    Come la vedete questa operazione..... credo che una certa sicurezza ci sia o no???
    o c'è qualche altro metodo secondo voi.... non potento interrogare direttamente il database?

    Inoltre se così secondo voi potrebbe andar bene, ci potrebbe anche essere il modo per cifrare anche il codice fiscale preso dal db... in modo da inviare una stringa che all'apparenza sia solo di numeri e lettere casuali.... e poi decifrarlo una volta ricevuto sul server aruba..

    Grazie di qualsiasi suggeritmento
    Giuseppe


  • ModSenior

    Ciao fantasma,

    personalmente per una comunicazione sicura, invece di usare l'utente come intermediario avrei fatto dialogare fra loro i due server direttamente.
    Un esempio lo trovi qui.