Visualizzazione risultati 1 fino 15 di 15

Discussione: aiuto urgente per sessioni

  1. #1
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito aiuto urgente per sessioni

    Scusate ragazzi, ho messo insieme un paio di scipt per il
    login che usano le sessioni.
    In locale funzionano senza problemi, ma una volta caricati sul server
    di altervista non riesco a capire cosa non va.
    Ecco gli script:

    index.php (per il login):

    Codice:
    <?php
    session_start();
    if($_SESSION["uname"] || $_SESSION["ulevel"]) {
    header("Location: $url");
    exit;
    }
    require("config.php");
    if(!IsSet($try_login)) {
    ?>
    <html>
    <head>
    <title> Login</title>
    <?php echo "$css"; ?>
    </head>
    <body>
    <table height="100%" width="100%" border="0">
    <tr>
    <td align="center">
    <form action="index.php" method="post">
    <input type="HIDDEN" name="try_login" value="1">
    <table align="center" summary="login" cellpadding="5" cellspacing="5">
    <tr>
    <td colspan="2" class="header2" align="center">Accedi alla tua pagina</td>
    </tr>
    <tr>
    <td>Username:</td><td><input type="text" name="username" class="inputb" size="10"></td>
    </tr>
    <tr>
    <td>Password:</td><td><input type="password" name="pass1" class="inputb" size="10"></td>
    </tr>
    <tr>
    <td align="center" colspan="2">
    <input type="submit" value="Login Now!" class="i" title="Login">
    </td>
    </tr>
    </table>
    </form><br>
    </td>
    </tr>
    </table> 
    </body>
    </html>
    <?php
    exit;
    }
    if(empty($username) || empty($pass1)){
    error("Please fill in all fields!");
    }
    $dbcnx = dbopen();
    $sql="SELECT * FROM utenti WHERE username = '$username' AND pass1 = '$pass1'";
    $result=MySQL_query($sql);
    if (mysql_num_rows($result) != 1) {
        error("Invalid Username/Password");
    } else {
    $d=mysql_fetch_array($result);
    $level=$d["access"];
    $url=$d["url"];
    $uname = $username;
    $ulevel = $level;
    $_SESSION["uname"]=$uname;
    $_SESSION["ulevel"]=$ulevel;
    echo("<html><head><title>$username Logged In</title><link rel=\"stylesheet\" type=\"text/css\" href=\"news.css\"><meta http-equiv=\"Refresh\" content=\"1; url=$url\"></head><body><table border=\"0\" cellpadding=\"5\" width=\"100%\" height=\"100%\" align=\"center\"><tr><td align=\"center\" class=\"header2\"><font color=\"#7373c6\">\"$username\"</font> Logged In!</td></tr></table></body></html>");
    mysql_close($dbcnx);
    exit;
    }
    ?>

    e la pagina protetta gianluca31.php:

    Codice:
    <?php
    session_start();
    require("config.php");
    if(!$_SESSION['uname']) {
    error("You are not authorized to view this page!");
    exit;
    }
    echo "ciao";
    logout();
    // Logout
    function logout() {
    global $css;
    session_destroy();
    echo "<html><head><title>$text</title>$css</head><body><table border=\"0\" cellpadding=\"0\" width=\"100%\" height=\"100%\" align=\"center\"><tr><td align=\"center\" class=\"header2\">Login Session Destroyed<br><br><a href=\"index.php\" title=\"Login Again?\" target=\"_top\">Login Again?</a></td></tr></table></body></html>";
    }
    ?>

    Ci sono il file css e config che non dovrebbero causare problemi

    Una volta inseriti username e pass nel form ho questo messaggio
    di errore estratto dalla pagina protetta gianluca31:


    You are not authorized to view this page!

    La sessione non va?
    Come mai?
    Un problema di indirizzo pagina utente..ma ho provato a modicarlo
    in tutti i modi (url intero, relativo ecc: addesso nel campo url del db sono riportati cosi:
    gianluca31.php, pippo.php ecc)
    Grazie anticipatamente per ogni eventuale aiuto.
    Ciao

  2. #2
    Guest

    Predefinito

    potrebbe essere un problema di cookies
    per funzionare le sessioni richiedono i cookies

    prova cosi': invece di
    Codice PHP:
    header("Location: $url");
    metti
    Codice PHP:
    if (SID!="") $url.=striptags(SID);
    header("Location: $url");
    SID e' una costante che contiene il codice di sessione solo se i cookie nn sn abilitati, per cui il codice controlla se contiene qualcosa nel qual caso lo passa come argomento (stiptags serve a eliminare la possibilita' di uno script injection. btw il tuo codice nn e' sicuro, passando le variabili in qst modo sei soggetto a sql injection, del tipo user=asdsd' or 'a'='a)

  3. #3
    Guest

    Predefinito

    stavo per dirlo io... basta una semplice nick_esistente' OR 'a'='a per permettere ad un malintezionato di loggarsi senza conoscere la pass...

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da neoscript
    stavo per dirlo io... basta una semplice nick_esistente' OR 'a'='a per permettere ad un malintezionato di loggarsi senza conoscere la pass...
    fatto tardi bello
    io ho postato a mezzanotte, tu arrivi fresco fresco alle 15, ke pretendi?


    e cmq il giochetto va ripetuto pure x la pass

  5. #5
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da neoscript
    stavo per dirlo io... basta una semplice nick_esistente' OR 'a'='a per permettere ad un malintezionato di loggarsi senza conoscere la pass...
    scusate ragazzi, conosco poco il php.
    che significa quanto sopra?
    Fatemi, per piacere un caso pratico.
    E come posso rimediare?
    Comunque l'errore persiste anche con la modifica.
    Ma come deve essere impostato nel campo url l'indirizzo per il redirect?
    grazie per l'intervento.
    Ciao
    Ultima modifica di gianlucaweb : 03-10-2004 alle ore 16.44.53

  6. #6
    Guest

    Predefinito

    ok ti spiego il mio msg precedente
    Codice PHP:
    if (SID!="") $url.="?" . strip_tags(SID);
    header("Location: $url");
    questo codice controlla se SID (che aontiene il codice di sessione) contiene qualcosa, nel qual caso lo agiunge come parametro all'url
    strip_tags serve ad evitare un javascript injection (ovvero insieme al sid qualcke utente potrebbe passare del codice javascript maligno)


    per qnt riguarda le sql injection di cui parlavamo, significa qst:
    tu hai scritto la query cosi':
    Codice PHP:
    $sql="SELECT * FROM utenti WHERE username = '$username' AND pass1 = '$pass1'";
    ora immagina ke il solito utente/hacker ti passa come username user' or 'a'='a e lo stesso per pass: la query risulta:
    Codice PHP:
    $sql="SELECT * FROM utenti WHERE username = 'user' OR 'a'='a' AND pass1 = 'pass' OR 'a'='a'";
    che e' sempre vera perche' nella query viene agiunto il OR 'a'='a' ke da' sempre true
    x eviare questo basta (almeno credo) togliere gli apici dalla stringa, ovvero prima della query metti:
    Codice PHP:
    $username=str_replace("'","",$username);
    $pass1=str_replace("'","",$pass1);
    spero di essere stato abbastanza kiaro
    Ultima modifica di dxblade : 03-10-2004 alle ore 16.58.16

  7. #7
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    ok ti faccio sapere, grazie
    Ma è strano!!
    A parte il problema della sicurezza
    ho inviato lo script ad un mio amico che li ha caricati sul server di ARUBA
    e non riceve il messaggio di errore (la non autorizzazione alla visualizzazione della pagina di cui sopra). Non ha, in pratica il mio stesso problema di accesso!!!
    Boh?
    Che ne pensi.
    ciao

  8. #8
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Grazie
    ho fatto le modifiche (quella prima del redirect) ma continuo a non accedere
    alle pagine, sempre il solito messaggio di errore:
    "You are not authorized to view this page!"
    della pagina protetta.
    Il fatto è che in un primo momento mi da accesso con il messaggio
    utente log-in. Ma come mai? uff!


    Sulla seconda questione non ho capito bene una cosa.
    Ma nel campo username e password del form della pagina per il login
    si deve inserire rispettivamente:

    user' or 'a'='a (per l'username)
    pass' OR 'a'='a'(per la pass)

    a proposito ho scritto bene o gli apici non sono al posto esatto
    (o forse è così: user or 'a'='a' boh?)

  9. #9
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    ecco!!
    Sono riuscito ad accedere alle pagine.
    Era un problema del browser Firebird, con Explorer non ho problemi.

    Rimane il problema sicurezza di cui sopra.
    Aspetto delucidazioni.
    Grazie ancora e ciao

  10. #10
    Guest

    Predefinito

    il problema e' che se metti
    user' or 'a'='a (per l'username)
    pass' OR 'a'='a(per la pass)

    ti da' accesso anke se nn sei autorizzato perche' gli apici kiudono quelli ke hai inserito tu legittimamente nella query
    qnd la soluz e' togliere gli apici da user & pass

  11. #11
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da dxblade
    il problema e' che se metti
    user' or 'a'='a (per l'username)
    pass' OR 'a'='a(per la pass)

    ti da' accesso anke se nn sei autorizzato perche' gli apici kiudono quelli ke hai inserito tu legittimamente nella query
    qnd la soluz e' togliere gli apici da user & pass
    grazie per la risposta.
    il fatto è che ho provato ad iserire:

    user' or 'a'='a (per l'username)
    pass' OR 'a'='a(per la pass)

    nei relativi campi
    ma mi restituisce comunque invalid username/password
    e poi a quale pagina poi dovrebbe reindirizzarmi.
    Forse (anzi sicuramente) mi sfugge qualcosa vista la mia
    scarsa conoscenza dell'argomento, abbiate pazienza
    Provvedero a togliere gli apici ovviamente..ma sono comunque curioso
    OLD
    ciao e grazie ancora

  12. #12
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito


  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da gianlucaweb
    ???
    nn ho risp perche' nn mi collego da due gg, l'univ+patente toglie tempo :grin:


    cmq ho riletto il codice e ho visto il controllo sulle righe risultanti dalla query ke nn avevo visto
    mettendo quel tipo di sql injection la query restituisce tutta la tabella, per cui le righe nn sono sicuramente una sola, per qst nn vedi il risultato
    cmq conviene sempre strippare gli apici x evitare ke ti venga iniettato codice ke nn ci dovrebbe essere

  14. #14
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito per completare

    Citazione Originalmente inviato da dxblade
    ???
    nn ho risp perche' nn mi collego da due gg, l'univ+patente toglie tempo :grin:


    cmq ho riletto il codice e ho visto il controllo sulle righe risultanti dalla query ke nn avevo visto
    mettendo quel tipo di sql injection la query restituisce tutta la tabella, per cui le righe nn sono sicuramente una sola, per qst nn vedi il risultato
    cmq conviene sempre strippare gli apici x evitare ke ti venga iniettato codice ke nn ci dovrebbe essere
    ciao

    allora ricapitolando mi conviene aggiungere al codice della mia pagina questo:



    if (SID!="") $url.="?" . strip_tags(SID); // o è superfluo visto che adesso accedo senza problema (il problema è di Firebird!)


    e sicuramente questo:

    $username=str_replace("'","",$username);
    $pass1=str_replace("'","",$pass1);


    Va bene? Giusto per concludere la discussione.
    Rinnovo i ringraziamenti per l'interessamento e i consigli.
    Ciao

  15. #15
    Guest

    Predefinito

    si tutto ok
    nella maggioranza dei casi funza anke senza le aggiunte, ma male nn fanno, per cui megli con ke senza

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •