- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema Sql Apici In Form Login
-
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]
-
Ciao guadagnaeuro,
puoi usare la funzione mysql_real_escape_string.
-
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
-
Devi farlo a tutte le variabili che passi nelal query, ad esempio:
[php]
$sessid = mysql_real_escape_string($sessid);
[/php]
-
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* <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]
-
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
-
Ciao ma il codice è tuo oppure lo hai scaricato dal web ? i dati nel form passali per post e non per Get
-
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
-
Risolto anche questo
A presto
-
@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.