Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    Autenticazione su altro server

    Ciao a tutti,
    ragazzi devo condividere un'applicazione che si trova su aruba, con un'altra che si trova su un'altro server.
    La condivisione consiste nel fare l'autenticazione su un server, cioè la tabella utenti risiede su un'altro server mentre tutto il resto sta su aruba-

    Potrei fare una connessione al server dove risiede la tabella utenti è una volta messi in sessione continuare sul mio che si trova su aruba.
    Teoria valida se non fosse che aruba blocca le connessioni ad altri database se non i suoi.
    Quale soluzione veloce, consigliereste?
    Una buona giornata
    Giuseppe

  2. #2
    Sul server aruba avvia la sessione.
    Crea una stringa casuale (rand() / microtime() / md5(), etc.) e salvala in sessione
    Genera la form di login che punti verso il server dove devi fare l'autenticazione
    Tra i campi della form inserisci un hidden con la stringa casuale
    Sull'altro serve esegui l'autenticazione
    Se va a buon fine, crea un hash un hash della stringa casuale insieme ad una password segreta (es. https://api.wordpress.org/secret-key/1.1/ ) insieme all'IP dell'utente.
    Poi esegui un redirect verso il server aruba passando l'hash appena generato.
    Sul server aruba confronti l'hash passato con un hash generato allo stesso modo.
    Se corrispondono, l'utente è autenticato.

    Dato che la la password usata come componente dell'hash non è pubblica, il sistema è abbastanza sicuro. Ovviamente qualcuno potrebbe dire che un attacco brute force potrebbe permettere di trovare un hash valido, etc. etc. Se il problema è garantire un livello elevato di sicurezza, forse è il caso di cambiare provider.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605
    grazie mille filippo,
    non ho mai lavorato con queste stringhe ma mi documento subito.....

    naturalmente nel redirect ad aruba una volta fatto il login lo dovrei passare in get la stringa creata vero? e se dalla tabella utenti oltre al controllo username e password mi voglio tirar fuori anche nome, cognome e codice fiscale (o anche solo codice fiscale) sarebbe troppo lunga come stringa in get vero? o sarebbe sempre fattibile... ma forse la miglior cosa è provare....

    Dico questo perchè in realtà sul server aruba dell'utente che si è loggato mi serve il suo codice fiscale...per fare poi dei controlli sul database di aruba mi spiego?
    ancora grazie
    Giuseppe

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605
    Allora io ho fatto in questo modo... secondo voi può andar bene??

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



    Codice 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($stringrand(0$max_start_index), $length);

        return 
    $random_string;
    }

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

    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...

    Codice 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:[url]http://www.serveraruba.com/test/ricerca.php?code=[/url]" $mystrmd5.$cf);
    }else{
        
    header("location:[url]http://www.serveraruba.com/test/index.php?errore=1[/url]");    
    }    


    //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. 
    Quando ricevo i dati sulla pagina ricerca.php che si trova su aruba, faccio come segue...

    Codice 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_cf032);

    // 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 "
    "
    ;
        
    }else{
    echo 
    "<H3>Errore!!!!!!!</H3>";

    Come la vedete questa operazione..... credo che una certa sicurezza ci sia o no???
    Almeno credo di aver seguito il tuo consiglio filippo o dicevi diversamente?

    Inoltre se così secondo voi potrebbe andar bene, ci potrebbe 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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.