• Bannato Super User

    Problema Sql Apici In Form Login

    Salve
    Chiedo un aiuto per un form di login dove inserendo gli apici ' da errori sql e dunque vulnerabile agli attacchi.
    Per favore mi potete aiutare per sistemare questo errore?
    Ho gia provato con lo string replace ma non sono riuscito a correggere errore
    Grazie mille
    Codice della pagina
    [php]
    <?
    //S//
    function new_session($userid, $lifespan="3600", $ipvoid) {
    global $vip, $Db1;
    $expirytime = (string) (time() - $lifespan);
    $delresult = $Db1->query("DELETE FROM sessions WHERE start_time<$expirytime or user_id='$userid'");
    $found=false;
    do {
    $sessid = rand_string(20);
    $sessid2 = rand_string(5);
    $sql=$Db1->query("SELECT * FROM sessions WHERE (sess_id = '$sessid') AND (sess_id2='$sessid2')");
    if($Db1->num_rows() == 0) {
    $found=true;
    }
    } while ($found == false);
    $currtime = (string) (time());
    $sql = $Db1->query("INSERT INTO sessions SET
    sess_id='$sessid',
    sess_id2='$sessid2',
    user_id='$userid',
    start_time='$currtime',
    remote_ip='$vip',
    ipvoid='$ipvoid'
    ");
    return array($sessid, $sessid2);
    }

    if($action == "login") {
    $Db1->query("UPDATE user SET lockout='' WHERE lockout!='' and lockout<".time()."");
    if($settings[login_route] == 1) {
    $correct_code=0;
    $sql=$Db1->query("SELECT * FROM route_codes WHERE id='$rid'");
    $temp=$Db1->fetch_array($sql);
    if(($routing_code != $temp[code]) || ($routing_code == "") || ($rid == "")) {
    $correct_code=0;
    }
    else {
    $correct_code=1;
    }
    $Db1->query("DELETE FROM route_codes WHERE id='$rid'");
    $Db1->query("DELETE FROM route_codes WHERE dsub<".(time()-600)."");
    }
    if(($correct_code==0) && ($settings[login_route] == 1)) {
    $msg="<div align="center"><b>Errore!</b></div><br>Inserisci Il Codice Di Sicurezza Corretto! Riprova.";
    }
    elseif(($form_user != "") && ($form_pwd != "")) {
    $sql=$Db1->query("SELECT userid, password, username,suspended, verified, permission, lockout FROM user WHERE username='$form_user'");
    if($Db1->num_rows() != 0) {
    $userinfo = $Db1->fetch_array($sql);
    if(($userinfo[username] == $form_user) && ($userinfo[password] == md5($form_pwd))) {
    if($userinfo[suspended]==1) {
    $LOGGED_IN=false;
    $msg = "<div align="center"><b>Errore!</b></div><br>Il Tuo Account E' Stato Sospeso. Clicca <a href="index.php?view=contact&".$url_variables."">Contattaci</a> Per Chiarimenti.";
    }
    else if($userinfo[lockout] > time()) {
    $LOGGED_IN=false;
    $msg = "<div align="center"><b>Errore!</b></div><br>Il Tuo Account E' Temporaneamente Bloccato";
    $remaining=($userinfo[lockout]-time())/60;
    if($remaining < 1) $msg.="<b>Less than 1 minute.</b>";
    else $msg.="<b>".floor($remaining)." minutes.</b>";
    }
    else if(($userinfo[verified]==0) && ($settings[verify_emails] == 1)) {
    $Db1->sql_close();
    header("Location: index.php?view=resend_act&action=resend&uname=$form_user&".$url_variables."");
    exit;
    $LOGGED_IN=false;
    $msg = "<div align="center"><b>Errore!</b></div><br>La Tua Email Non E' Stata Verificata.<br>
    <li><a href="index.php?view=verify">Inserisci Il Codice Di Verifica</a>
    <li><a href="index.php?view=resend_act">Rimanda Il Codice Di Verifica</a>
    <li><a href="index.php?view=update_email">Cambia Il Mio Indirizzo Email</a>
    ";
    }
    else {

     $userid=$userinfo[userid];
     $username=$userinfo[username];
     $permission=$userinfo[permission];
     session_start();
     $sessids = new_session($userid,"3600",$ipvoid);
     $sessid=$sessids[0];
     $sessid2=$sessids[1];
     $sessiduid=$userid;
     session_register('sessid');
     session_register('sessid2');
     session_register('sessiduid');
     $session_sessid=$sessid;
     $session_sessid2=$sessid2;
     $session_sessiduid=$sessiduid;
     $_SESSION["sessid"] = $sessid;
     $_SESSION["sessid2"] = $sessid2;
     $_SESSION["sessiduid"] = $sessiduid;
     $Db1->sql_close();
     header("Location: setcookies.php?".iif(isset($returnTo),"view=$returnTo","view=account&ac=main")."".iif("$id","&id=$id").iif($ptype,"&ptype=$ptype").iif($step,"&step=$step")."".iif(isset($ac),"&ac=$ac")."&sid=$sessid&sid2=$sessid2&siduid=$userid");
     exit;
    }
    

    }
    else {
    $LOGGED_IN=false;
    $msg = "<div align="center"><b>Errore!</b></div><br>Si E' Verificato Un Errore Durante Accesso, Riprova";
    }

    }
    else {
    $sql=$Db1->query("SELECT * FROM user_deleted WHERE username='$form_user'");
    if($Db1->num_rows() != 0) {
    $msg = "<div align="center"><b>Errore!</b></div><br>Il Tuo Account E' Stato Cancellato, Per Maggiori Chiarimenti Contattaci";
    }
    else {
    $msg = "<div align="center"><b>Errore!</b></div><br>Il Tuo Account Non E' Iscritto In Questo Sito";
    }
    }
    }
    else {
    $msg = "<div align="center"><b>Errore!</b></div><br>Si E' Verificato Un Errore Durante Accesso, Riprova";
    }
    }
    if($msg != "") {
    $Db1->query("UPDATE user SET failed_logins=failed_logins+1 WHERE username='$form_user'");
    }
    if($settings[login_route] == 1) {
    srand((double)microtime()*1000000);
    $number = rand(1000,9999);
    $Db1->query("INSERT INTO route_codes SET
    code='$number',
    dsub='".time()."'
    ");
    $sql=$Db1->query("SELECT id FROM route_codes WHERE
    code='$number' and
    dsub='".time()."'
    ");
    $temp=$Db1->fetch_array($sql);
    $rid=$temp[id];
    }
    //E//

    $includes[content]="
    <font color="darkred">$msg</font>
    <div align="center">
    <form action="index.php?view=login&action=login&".iif($rid!="","rid=$rid&")."".$url_variables."" method="post" onSubmit="submitonce(this)">
    <table class="tableBD1" cellpadding=0 cellspacing=0>
    <tr>
    <td>
    <table cellpadding=0 cellspacing=1>
    <tr>
    <td class="tableHL1">
    <input type="hidden" value="$returnTo" name="returnTo">
    <input type="hidden" value="$id" name="id">
    <input type="hidden" value="$ac" name="ac">
    <input type="hidden" value="$step" name="step">
    <input type="hidden" value="$ptype" name="ptype">
    <div align="center">
    <b>Accesso Utenti</b><br><br>
    </div>
    </td>
    </tr>
    <tr>
    <td class="tableHL1">
    Username*     <input type="text" class="login" size="15" name="form_user"><br>
    Password*     <input type="password" class="login" size="15" name="form_pwd"><br>

    </td>
    </tr>
    <tr>
    </tr>
    <tr>
    <td class="tableHL1" align="center">

    ".iif($settings[login_route]==1,"
    <img src="route.php?rid=$rid"><br>
    Inserisci Codice Sicurezza:".("")."
    <input type="text" name="routing_code" size=4>
    </td>
    </tr>
    <tr>
    <td class="tableHL1" >
    ")."
    <div align="center"><input type="submit" value="Accedi" class="login_submit"></div>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    <small>*Attenzione Ai Caratteri Minuscoli E MAIUSCOLI</small><br>
    <small>*Se Non Leggi Il Codice Ricarica La Pagina</small>
    <br><br>

    <small><b>
    <a href="index.php?view=join&".$url_variables."">Iscriviti</a>     
    <a href="index.php?view=lostpwd&".$url_variables."">Password Dimenticata?</a>     
    <a href="index.php?view=verify&".$url_variables."">Attiva Il Tuo Account</a>
    </small></b>

    </form></div>
    ";
    ?>
    [/php]
    Errore visualizzato quando si inserisce un apice ' nel forum di login
    [php]
    Database error: Invalid SQL: UPDATE user SET failed_logins=failed_logins+1 WHERE username='''
    MySQL Error: 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1)
    Session halted.
    [/php]


  • ModSenior

    Ciao guadagnaeuro,
    puoi usare la funzione mysql_real_escape_string.


  • Bannato Super User

    Ciao

    Per favore potresti dirmi in che parte del codice debbo aggiungerla?

    Non riesco a capirlo, se mi puoi correggere il codice che ho postato

    Ti ringrazio davvero


  • ModSenior

    Devi farlo a tutte le variabili che passi nelal query, ad esempio:
    [php]
    $sessid = mysql_real_escape_string($sessid);
    [/php]


  • Bannato Super User

    Salve

    Ho provato come mi avete detto ma continua a darmi errori

    Potete aiutararmi grazie mille, ho aggiunto il mysql_real_escape_string ma ancora mi da errore.

    Vi ringrazio per aiuto

    [PHP]
    <?
    //S//
    function new_session($userid, $lifespan="3600", $ipvoid) {
    global $vip, $Db1;
    $expirytime = (string) (time() - $lifespan);
    $delresult = $Db1->query("DELETE FROM sessions WHERE start_time<$expirytime or user_id='$userid'");
    $found=false;
    do {
    $sessid = rand_string(20);
    $sessid2 = rand_string(5);
    $sql=$Db1->query("SELECT * FROM sessions WHERE (sess_id = '$sessid') AND (sess_id2='$sessid2')");
    if($Db1->num_rows() == 0) {
    $found=true;
    }
    } while ($found == false);
    $currtime = (string) (time());
    $sql = $Db1->query("INSERT INTO sessions SET
    sess_id = mysql_real_escape_string('$sessid'),
    sess_id2 = mysql_real_escape_string('$sessid2'),
    user_id = mysql_real_escape_string('$userid'),
    start_time = mysql_real_escape_string('$currtime'),
    remote_ip = mysql_real_escape_string('$vip'),
    ipvoid = mysql_real_escape_string('$ipvoid')
    ");
    return array($sessid, $sessid2);
    }

    if($action == "login") {
    $Db1->query("UPDATE user SET lockout='' WHERE lockout!='' and lockout<".time()."");
    if($settings[login_route] == 1) {
    $correct_code=0;
    $sql=$Db1->query("SELECT * FROM route_codes WHERE id='$rid'");
    $temp=$Db1->fetch_array($sql);
    if(($routing_code != $temp[code]) || ($routing_code == "") || ($rid == "")) {
    $correct_code=0;
    }
    else {
    $correct_code=1;
    }
    $Db1->query("DELETE FROM route_codes WHERE id='$rid'");
    $Db1->query("DELETE FROM route_codes WHERE dsub<".(time()-600)."");
    }
    if(($correct_code==0) && ($settings[login_route] == 1)) {
    $msg="<div align="center"><b>Errore!</b></div><br>Inserisci Il Codice Di Sicurezza Corretto! Riprova.";
    }
    elseif(($form_user != "") && ($form_pwd != "")) {
    $sql=$Db1->query("SELECT userid, password, username,suspended, verified, permission, lockout FROM user WHERE username='$form_user'");
    if($Db1->num_rows() != 0) {
    $userinfo = $Db1->fetch_array($sql);
    if(($userinfo[username] == $form_user) && ($userinfo[password] == md5($form_pwd))) {
    if($userinfo[suspended]==1) {
    $LOGGED_IN=false;
    $msg = "<div align="center"><b>Errore!</b></div><br>Il Tuo Account E' Stato Sospeso. Clicca <a href="index.php?view=contact&".$url_variables."">Contattaci</a> Per Chiarimenti.";
    }
    else if($userinfo[lockout] > time()) {
    $LOGGED_IN=false;
    $msg = "<div align="center"><b>Errore!</b></div><br>Il Tuo Account E' Temporaneamente Bloccato";
    $remaining=($userinfo[lockout]-time())/60;
    if($remaining < 1) $msg.="<b>Less than 1 minute.</b>";
    else $msg.="<b>".floor($remaining)." minutes.</b>";
    }
    else if(($userinfo[verified]==0) && ($settings[verify_emails] == 1)) {
    $Db1->sql_close();
    header("Location: index.php?view=resend_act&action=resend&uname=$form_user&".$url_variables."");
    exit;
    $LOGGED_IN=false;
    $msg = "<div align="center"><b>Errore!</b></div><br>La Tua Email Non E' Stata Verificata.<br>
    <li><a href="index.php?view=verify">Inserisci Il Codice Di Verifica</a>
    <li><a href="index.php?view=resend_act">Rimanda Il Codice Di Verifica</a>
    <li><a href="index.php?view=update_email">Cambia Il Mio Indirizzo Email</a>
    ";
    }
    else {

                    $userid = mysql_real_escape_string($userinfo[userid]);
                    $username = mysql_real_escape_string($userinfo[username]);
                    $permission = mysql_real_escape_string($userinfo[permission]);
                    session_start();
                    $sessids = mysql_real_escape_string(new_session($userid,"3600",$ipvoid));
                    $sessid = mysql_real_escape_string($sessids[0]);
                    $sessid2 = mysql_real_escape_string($sessids[1]);
                    $sessiduid = mysql_real_escape_string($userid);
                    session_register('sessid');
                    session_register('sessid2');
                    session_register('sessiduid');
                    $session_sessid = mysql_real_escape_string($sessid);
                    $session_sessid2 = mysql_real_escape_string($sessid2);
                    $session_sessiduid = mysql_real_escape_string($sessiduid);
                    $_SESSION["sessid"] = mysql_real_escape_string($sessid);
                    $_SESSION["sessid2"] = mysql_real_escape_string($sessid2);
                    $_SESSION["sessiduid"] = mysql_real_escape_string($sessiduid);
                    $Db1->sql_close();
                    header("Location: setcookies.php?".iif(isset($returnTo),"view=$returnTo","view=account&ac=main")."".iif("$id","&id=$id").iif($ptype,"&ptype=$ptype").iif($step,"&step=$step")."".iif(isset($ac),"&ac=$ac")."&sid=$sessid&sid2=$sessid2&siduid=$userid");
                    exit;
                }
            }
            else {
                $LOGGED_IN=false;
                $msg = "<div align=\"center\"><b>Errore!</b></div><br>Si E' Verificato Un Errore Durante Accesso, Riprova";
            }
             
        }
        else {
            $sql=$Db1->query("SELECT * FROM user_deleted WHERE username='$form_user'");
            if($Db1->num_rows() != 0) {
                $msg = "<div align=\"center\"><b>Errore!</b></div><br>Il Tuo Account E' Stato Cancellato, Per Maggiori Chiarimenti Contattaci";
            }
            else {
                $msg = "<div align=\"center\"><b>Errore!</b></div><br>Il Tuo Account Non E' Iscritto In Questo Sito";
            }
        }
    }
    else {
        $msg = "<div align=\"center\"><b>Errore!</b></div><br>Si E' Verificato Un Errore Durante Accesso, Riprova";
    }
    

    }

    if($msg != "") {
    $Db1->query("UPDATE user SET failed_logins=failed_logins+1 WHERE username='$form_user'");
    }

    if($settings[login_route] == 1) {
    srand((double)microtime()*1000000);
    $number = rand(1000,9999);
    $Db1->query("INSERT INTO route_codes SET
    code='$number',
    dsub='".time()."'
    ");
    $sql=$Db1->query("SELECT id FROM route_codes WHERE
    code='$number' and
    dsub='".time()."'
    ");
    $temp=$Db1->fetch_array($sql);
    $rid = mysql_real_escape_string($temp[id]);
    }

    //E//

    $includes[content]="
    <font color="darkred">$msg</font>
    <div align="center">
    <form action="index.php?view=login&action=login&".iif($rid!="","rid=$rid&")."".$url_variables."" method="post" onSubmit="submitonce(this)">

    <table class="tableBD1" cellpadding=0 cellspacing=0>
    <tr>
    <td>
    <table cellpadding=0 cellspacing=1>
    <tr>
    <td class="tableHL1">
    <input type="hidden" value="$returnTo" name="returnTo">
    <input type="hidden" value="$id" name="id">
    <input type="hidden" value="$ac" name="ac">
    <input type="hidden" value="$step" name="step">
    <input type="hidden" value="$ptype" name="ptype">
    <div align="center">
    <b>Accesso Utenti</b><br><br>
    </div>

    </td>
    </tr>
    <tr>
    <td class="tableHL1">

    Username* &nbsp;&nbsp;&nbsp; <input type=\"text\" class=\"login\" size=\"15\" name=\"form_user\"><br>
    Password* &nbsp;&nbsp;&nbsp; <input type=\"password\" class=\"login\" size=\"15\" name=\"form_pwd\"><br>
    

    </td>
    </tr>
    <tr>

    </tr>
    <tr>
    <td class="tableHL1" align="center">

    ".iif($settings[login_route]==1,"

    <img src="route.php?rid=$rid"><br>
    Inserisci Codice Sicurezza:".("")."
    <input type="text" name="routing_code" size=4>

    </td>
    </tr>
    <tr>
    <td class="tableHL1" >
    ")."
    <div align="center"><input type="submit" value="Accedi" class="login_submit"></div>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table>

    <small>*Attenzione Ai Caratteri Minuscoli E MAIUSCOLI</small><br>
    <small>*Se Non Leggi Il Codice Ricarica La Pagina</small>

    <br><br>

    <small><b>
    <a href="index.php?view=join&".$url_variables."">Iscriviti</a>     
    <a href="index.php?view=lostpwd&".$url_variables."">Password Dimenticata?</a>     
    <a href="index.php?view=verify&".$url_variables."">Attiva Il Tuo Account</a>
    </small></b>

    </form></div>

    ";
    ?>

    [/PHP]


  • Bannato Super User

    Purtroppo nel momento in cui ho aggiunto mysql_real_escape_string non funziona piu la pagina

    Non so come risolvere, dovrei aggiungere la correzione solo alla caselle dell'username ma non capisco il perche non mi funziona


  • User Attivo

    Ciao ma il codice è tuo oppure lo hai scaricato dal web ? i dati nel form passali per post e non per Get


  • Bannato Super User

    E' uno script già pronto e purtroppo non lo so correggere.

    Se me lo puoi correggere te ne sarò grato, non riesco davvero a capire come sistemare il problema.

    Ho provato ad intuito ma neppure funziona più

    Buona serata


  • Bannato Super User

    Risolto anche questo

    A presto


  • Consiglio Direttivo

    @guadagnaeuro said:

    Risolto anche questo

    Per conoscere i dettagli della soluzione si può consultare questa discussione, identica alla presente, aperta dall'utente.

    A norma di Regolamento ? articolo 11 ? chiudo il thread per crossposting e invito Guadagnaeuro a non duplicare le discussioni se non vede arrivare aiuti, ma ad attendere pazientemente le risposte come fanno tutti gli altri.

    Grazie della collaborazione e buon proseguimento in gt.