- Home
- Categorie
- Coding e Sistemistica
- PHP
- Modifica informazioni personali script php
-
Prova a cambiare questa riga
[PHP]$query="update members set Name='$db_field[1]', Address='$db_field[2]', City='$db_field[3]', State='$db_field[4]', Zip='$db_field[5]', Country='$db_field[6]' where ID=$db_field[0]";[/PHP]
in
[PHP]$query="update members set Name='$db_field[1]', Address='$db_field[2]', City='$db_field[3]', State='$db_field[4]', Zip='$db_field[5]', Country='$db_field[6]' where ID=".intval($id);[/PHP]
In ogni caso, oltre ad essere parecchio confuso, il codice sembra avere diversi problemi di sicurezza
-
ciao gan
ti ringrazio per la collaborazione, ho risolto questo questo problema con la tua indicazione. Hai detto che nel file hai riscontrato dei problemi di sicurezza, che cosa intendi?
grazie
-
Il codice che hai postato può essere utilizzato per eseguire query arbitrarie
Per approfondire puoi dare un'occhiata a questa pagina
it.wikipedia.org/wiki/SQL_injection
-
interessante.... lo script che ho installato l'ho acquistato qualche tempo fa e funziona in questo modo: all'atto dell'iscrizione da parte di un utente si riceve un ID e una PW. Tramite questi si accede in una pagina personale dove vi è la possibilità di scaricare prodotti digitali, che io, come amministratore posso inserire. Al programma è applicato un sistema a matrice forzata 4X10. Ammettiamo che io abbia ID=1 e tramite un link personale generato all'atto dell'adesione faccia iscrivere un utente "ID=2".
A questo punto "ID=2" verrebbe posizionato dal programma al mio 1° livello inferiore.
Ammettiamo ora che "ID=2" a sua volta inserisca "ID=3".
A questo punto "ID=3" verrebbe posizionato al mio 2° livello inferiore e così via.
Questo appunto dovrebbe avvenire correttamente, invece anche "id=3" mi viene posizionato al 1° livello inferiore.
La mia spiegazione è stata un pò contorta ma spero di essermi fatto capire bene.
Ora non so se questo errore sia dovuto a qualche errore di programmazione o se dipenda dal database.
Che ne pensi?
grazie
-
Senza ulteriori dettagli è difficile da capire, credo sia un errore di programmazione.
In ogni caso considera che se tutte le query sono fatte in quel modo esiste una possibilità concreta che sia possibile forzare la verifica e scaricare i prodotti digitali assegnati ad altri utenti.
-
esiste qualche modo per potersi proteggere da questo?
se posto il file con la programmazione della matrice ci puoi dare uno sguardo?
grazie
-
Postalo pure, sperando che il codice non sia troppo confuso
-
ti ringrazio
intanto nel file config.php oltre ai dati di accesso per il database c'è questo che non so se può ritornarti utile//Don't change the below 2 lines
$dbconnect=mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);$rs=mysql_query("select * from adminsettings");
if(mysql_num_rows($rs)>0) {
$arr=mysql_fetch_array($rs);
$sitename=$arr[0];
$siteurl=$arr[1];
$webmasteremail=$arr[2];
$adminpass=$arr[3];$alertpay=$arr[4];
$fee=$arr[7];
$levels=$arr[8];
$level1=$arr[9];
$level2=$arr[10];
$level3=$arr[11];
$level4=$arr[12];
$level5=$arr[13];
$level6=$arr[14];
$level7=$arr[15];
$level8=$arr[16];
$level9=$arr[17];
$level10=$arr[18];$forcedmatrix=$arr[19];
$membershipperiod=$arr[20];
$signupbonus=$arr[21];
}Per quanto riguarda il file per la matrice credo si trovi nel file members.php;
io provo a postartelo tutto perchè non saprei estrapolare la parte che realmente possa essere utile. Purtroppo e molto lungo e ti chiedo scusa in anticipo.<?php
session_start();
session_register("id_session");
session_register("password_session");
include "header.php";
include "config.php";
$a="";
$b="";if ($_POST) {
$a=trim($_POST["id"]);
$b=trim($_POST["password"]);
$a=str_replace("'","",$a);
$b=str_replace("'","",$b);
$a=str_replace(""","",$a);
$b=str_replace(""","",$b);}
if ($a=="" || $b=="")
{if ($_SESSION["id_session"]=="" || $_SESSION["password_session"]=="")
{?>
<form action=members.php method=post>
<br><br><Center><table><tr><td colspan=2 align=center><h3>Members Login Area</h3></td></tr>
<tr><td>Member's ID</td><td><input type=text name=id></td></tr>
<tr><td>Password</td><td><input type=password name=password></td></tr>
<tr><td> </td><td>
<a href="forgot.php" onclick="doexit=false;"><font face="Verdana,Arial,Helvetica" size="1" color="#000000"><b>Forgot Your Password?</b></font></a></td></tr>
<tr><td colspan=2 align=center><input type=submit value="Log In"></td></tr>
</table></form><?
}
else
{
middle();
}
}
else
{
$check=0;$id=$_POST["id"];
$rs = mysql_query("select * from members where ID='$id'");if ($rs) {
$arr=mysql_fetch_array($rs);
$n2=$arr['Password'];
if ($n2==$b) {
$check=1;
$_SESSION["id_session"]=$arr[0];
$_SESSION["password_session"]=$arr[9];
middle();
}
}
if ($check==0)
{
print "<h2>Invalid User Id or Password</h2>";
?><form action=members.php method=post>
<br><br><Center><table><tr><td colspan=2 align=center><h3>Members Login Area</h3></td></tr>
<tr><td>Member's ID</td><td><input type=text name=id></td></tr>
<tr><td>Password</td><td><input type=password name=password></td></tr>
<tr><td> </td><td>
<a href="forgot.php" onclick="doexit=false;"><font face="Verdana,Arial,Helvetica" size="1" color="#000000"><b>Forgot Your Password?</b></font></a></td></tr>
<tr><td colspan=2 align=center><input type=submit value="Log In"></td></tr>
</table></form>
<?
}
}function middle()
{$id=$_SESSION["id_session"];
$rs = mysql_query("select * from members where ID=$id");
$arr=mysql_fetch_array($rs);
$check=1;
$id=$arr[0];
$password=$arr[9];
$name=$arr[1];
$address=$arr[2];
$city=$arr[3];
$state=$arr[4];
$zip=$arr[5];
$country=$arr[6];
$phone=$arr[7];
$email=$arr[8];
$password=$b;
$paymentoption=$arr[10];
$refby=$arr[11];
$l1=$arr[12];
$l2=$arr[13];
$l3=$arr[14];
$l4=$arr[15];
$l5=$arr[16];
$l6=$arr[17];
$l7=$arr[18];
$l8=$arr[19];
$l9=$arr[20];
$l10=$arr[21];
$leader=$arr[22];
$total=$arr[23];
$unpaid=$arr[24];
$paid=$arr[25];?>
<table border="0" width="650">
<tr>
<td width="150" valign="top">
<table width="140">
<tr>
<td align="left"><br><br><br><br>
<ul><font face="verdana" size="1">
<a href="stats.php">Statistics</a><br><br>
<a href="update_pf.php">Edit Personal Information</a><br><br>
<a href="sample_e.php">Referral Code & Links</a><br><br>
<a href="logout.php">Logout</a><br><br></td></tr></table>
</td>
<td VALIGN="top">
<table>
<tr>
<td>
<font face="verdana" size="3"><b>
<p>Account Center</b></font></p><br>
</td>
</tr>
<tr>
<td><div align="center">
<table border="0" cellpadding="3" cellspacing="0" width="400"><tr> <td colspan="2"><b> <hr><font face="Verdana, Arial, Helvetica, sans-serif" size="-1"><center> Account Details for <?echo $name;?></font></center></b><hr> </td> </tr> <tr> <td valign="center" align="left"><strong><font face="Verdana" size="-1">Total Commisions Earned: </font></strong><br></td> <td valign="center"> <font face="Verdana" size="-1">$<? echo $total;?></font><br></td> </tr> <tr> <td valign="center" align="left"><strong><font face="Verdana" size="-1">Commisions Due: </font></strong><br></td> <td valign="center"> <font face="Verdana" size="-1">$<? echo $unpaid;?></font><br></td> </tr> <tr> <td valign="center" align="left"><strong><font face="Verdana" size="-1">Commisions Paid: </font></strong><br></td> <td valign="center"> <font face="Verdana" size="-1">$<? echo $paid;?></font><br></td> </tr> <tr> <td valign="center" align="left" colspan=2> </td> </tr> <tr> <td valign="center" align="left"><strong><font face="Verdana" size="-1">Direct Referrals: </font></strong><br></td> <td valign="center"> <font face="Verdana" size="-1"><?
$rsd=mysql_query("select * from members where Leader=".$id);
echo mysql_num_rows($rsd); ?></font><br></td>
</tr>
<tr>
<td valign="center" align="left" colspan=2> </td>
</tr>
<tr>
<td valign="center" align="left" colspan=2><strong><font face="Verdana" size="3">Downline Information </font></strong><br></td>
</tr><tr> <td valign="center" align="left"><strong><font face="Verdana" size="-1">Total Downline Size: </font></strong><br></td> <td valign="center"> <font face="Verdana" size="-1"><? echo ($l1+$l2+$l3+$l4+$l5+$l6+$l7+$l8+$l9+$l10); ?></font><br></td> </tr> <tr><td colspan=2> <Table width=100%> <tr><td bgcolor=#000000><strong><font face="Verdana" size="-1" color=#ffffff>Level</font></strong></td> <td bgcolor=#000000><strong><font face="Verdana" size="-1" color=#ffffff>Number of Members</font></strong></td> </tr>
<? include "config.php"; ?>
<? for($i=1;$i<=$levels;$i++) { ?>
<tr><td><strong><font face="Verdana" size="-1"><? echo $i; ?></font></strong></td>
<td ><font face="Verdana" size="-1">
<?
if($i==1) {
echo $l1;
}
elseif($i==2) {
echo $l2;
}
elseif($i==3) {
echo $l3;
}
elseif($i==4) {
echo $l4;
}
elseif($i==5) {
echo $l5;
}
elseif($i==6) {
echo $l6;
}
elseif($i==7) {
echo $l7;
}
elseif($i==8) {
echo $l8;
}
elseif($i==9) {
echo $l9;
}
elseif($i==10) {
echo $l10;
}
?>
</font></td> </tr>
<? } ?>
</table>
</td></tr>
<tr><td colspan=4><hr></td><tr>
</table>
</div></td> </tr> </table> <font face="verdana" size="3"><b> <p>Download Center</b></font></p>
<?
include "download.php";
?>
</td>
</tr>
</table>
<br><br>
<?
}
include "footer.php";
?>
-
Devo darti una brutta notizia
Anche il codice che hai postato è passibile di sql injection.
Cioè tramite il form di login è possibile eseguire query arbitrarie sul database.
Probabilmente nel file download.php c'è l'algoritmo che verifica se l'utente è autorizzato a scaricare i prodotti digitali. Ma quasi sicuramente si può scavalcare resettando le password tramite il form di login.
-
capisco...... ma quello che ho postato è il file giusto dove è impostato il funzionamento della matrice?
-
Credo sia quello giusto ma senza avere la struttura del database sottomano è molto difficile da capire se il funzionamento è quello atteso visto che chi ha programmato lo script preleva i dati facendo riferimento non al nome del campo ma alla sua posizione nella query (ad esempio vedi i vari $arr[19] etc.etc.).
In ogni caso, scusa la franchezza, ma credo che il corretto funzionamento della matrice sia l'ultimo dei tuoi problemi.
-
il problema dell'esecuzione delle query arbitrarie sul database può essere risolto in qualche modo? Il problema potrebbe essere un infiltrazione da parte di utenti esterni anche non iscritti?
-
Ti consiglio di contattare l'autore e segnalare il problema. Il problema lo puoi risolvere (come spiegato nella pagina di wikipedia che ti ho linkato) validando l'input ricevuto attraverso il form.
Oltre all'infiltrazione di utenti esterni qualcuno potrebbe cancellare tutti i tuoi dati, cambiare la password di tutti gli utenti e altri giochetti del genere.
-
Proverò a contattare l'autore dello script o meglio il sito dove l'ho acquistato e cercherò di esporre il problema; spero di riuscirci anche se il sito è in inglese. Se riuscissi comunque a risolvere il problema della matrice per me sarebbe comunque un passo importante. Mi hai detto che senza avere la struttura del database sarebbe difficile capire il funzionamento, ma se te la fornissi riusciresti a venirne a capo?
-
Mi dispiace ma non ho tempo da dedicare a questa cosa