problema in PHP

« Older   Newer »
  Share  
FrontBack
CAT_IMG Posted on 16/2/2011, 17:46     +1   -1




ho un piccolo problema:
ho un codice php che si "interfaccia" con un database mysql che mi serve per le abilitazioni di una licenza di un mio programma.
fa in modo che se l'user, la pass e la chiave di registrazione sono giuste, ritorna 1.
ma ho messo un campo che, se impostato a 1, segnala che la copia è stata già validata con quel codice e dovrebbe ritornare 0. il problema è che ritorna sempre 1!

posto il codice (con relativo user e pass oscurati! XD) e sono sicuro che mi ammazzerete, ma sono agli inizi!! XDDD

SPOILER (click to view)
CODICE
<?php
$user = "*******";
$pass = "*******";
$con=mysql_connect("didocorp.altervista.org",$user,$pass);
if(!$con)die('Could not connect:'.mysql_error());
mysql_select_db("my_didocorp",$con);

if ($_GET['user'] <> "" && $_GET['pwd'] <> "" && $_GET['regkey'] <> "") {
       $q = mysql_query("SELECT * FROM didocorp_products_mdidos", $con) or die('Error: '.mysql_error());
       $UserL = $_GET['user'];
       $PassL = $_GET['pwd'];
       $q2 = mysql_query("SELECT activated FROM didocorp_products_mdidos WHERE user='".$UserL."'", $con) or die('Error: '.mysql_error());
       $row2 = mysql_fetch_array($q2, MYSQL_ASOC);
       if ($row2['activated'] == "1") {
               echo "0x00";
       }
       $result = mysql_query("UPDATE didocorp_products_mdidos SET activated=1 WHERE user='".$UserL."' AND pass='".$PassL."'", $con) or die('Error: '.mysql_error());
       while ($row = mysql_fetch_array($q, MYSQL_ASSOC)) {
               if ($_GET['user'] == $row['user'] && $_GET['pwd'] == $row['pass'] && $_GET['regkey'] == $row['regkey']) {
                       echo "1";
               }else{
                       echo "0";
               }
       }
} else {
       echo "0x0";
}

?>


ritornerebbe 0x0 se i parametri mancano, 0x00 se è già abilitata, e 0 se i dati di autenticazione sono errati.

helpatemi! :(
 
Top
/dev/random
CAT_IMG Posted on 16/2/2011, 18:01     +1   -1




Un po' di cose:
1) L'user è didocorp xD
2) La password su AV se vuoi puoi anche non metterla
Ma passiamo alle cose serie :D
3) Il codice è soggetto a SQL Injection [Proteggersi dalla SQL Injection]
4) Supponendo la struttura del tuo database, il codice potrebbe essere questo:
CODICE
<?php
$user = "*******";
$pass = "*******";
$con=mysql_connect("didocorp.altervista.org",$user,$pass);
if(!$con)die('Could not connect:'.mysql_error());
mysql_select_db("my_didocorp",$con);

if ($_GET['user'] <> "" && $_GET['pwd'] <> "" && $_GET['regkey'] <> "") {
      $q = mysql_query("SELECT * FROM `my_didocorp`.`didocorp_products_mdidos`", $con) or die('Error: '.mysql_error());
      $UserL = $_GET['user'];
      $PassL = $_GET['pwd'];
      $q2 = mysql_query("SELECT activated FROM didocorp_products_mdidos WHERE user='".$UserL."'", $con) or die('Error: '.mysql_error());
      $row2 = mysql_fetch_array($q2, MYSQL_ASOC);
      if ($row2['activated'] == "1") {
              echo "0x00";
      }
      $result = mysql_query("UPDATE `my_didocorp`.`didocorp_products_mdidos` SET `activated`=1 WHERE `user`='".$UserL."' AND `pass`='".$PassL."'", $con) or die('Error: '.mysql_error());
      $rows = mysql_fetch_full_result_array($q);
              foreach($rows as $row) {
                  if ($_GET['user'] == $row['user'] && $_GET['pwd'] == $row['pass'] && $_GET['regkey'] == $row['regkey']) {
                          echo "1";
                  }else{
                          echo "0";
                  }
              }
      }
} else {
      echo "0x0";
}

function mysql_fetch_full_result_array($result) // trovata su php.net
{
   $table_result=array();
   $r=0;
   while($row = mysql_fetch_assoc($result)){
       $arr_row=array();
       $c=0;
       while ($c < mysql_num_fields($result)) {      
           $col = mysql_fetch_field($result, $c);  
           $arr_row[$col -> name] = $row[$col -> name];          
           $c++;
       }  
       $table_result[$r] = $arr_row;
       $r++;
   }  
   return $table_result;
}

?>


E indenta meglio xD non si capisce niente :D
 
Top
FrontBack
CAT_IMG Posted on 17/2/2011, 18:57     +1   -1




ho un problemino: non funziona. Anche se il codice è stato già validato ritorna sempre 1, mentre dovrebbe ritornare 0... :unsure:
ho anche provato a scongiurare possibili sql injections.

SPOILER (click to view)
CODICE
<?php
$user = "*******";
$pass = "*******";
$con=mysql_connect("didocorp.altervista.org",$user,$pass);
if(!$con)die('Could not connect:'.mysql_error());
mysql_select_db("my_didocorp",$con);

if ($_GET['user'] <> "" && $_GET['pwd'] <> "" && $_GET['regkey'] <> "") {
     $q = mysql_query("SELECT * FROM `my_didocorp`.`didocorp_products_mdidos`", $con) or die('Error: '.mysql_error());
     $UserL = str_replace($_GET['user'], ";", "");
         $UserL = str_replace($UserL, "'", "");
     $PassL = str_replace($_GET['pwd'], ";", "");
         $PassL = str_replace($PassL, "'", "");
     $q2 = mysql_query("SELECT activated FROM didocorp_products_mdidos WHERE user='".$UserL."'", $con) or die('Error: '.mysql_error());
     $row2 = mysql_fetch_array($q2, MYSQL_ASOC);
     if ($row2['activated'] == "1") {
             die("0x00");
     }
     $result = mysql_query("UPDATE `my_didocorp`.`didocorp_products_mdidos` SET `activated`=1 WHERE `user`='".$UserL."' AND `pass`='".$PassL."'", $con) or die('Error: '.mysql_error());
     $rows = mysql_fetch_full_result_array($q);
             foreach($rows as $row) {
                 if ($_GET['user'] == $row['user'] && $_GET['pwd'] == $row['pass'] && $_GET['regkey'] == $row['regkey']) {
                         die("1");
                 }else{
                         die("0");
                 }
             }
} else {
     die("0x0");
}

function mysql_fetch_full_result_array($result) // trovata su php.net
{
  $table_result=array();
  $r=0;
  while($row = mysql_fetch_assoc($result)){
      $arr_row=array();
      $c=0;
      while ($c < mysql_num_fields($result)) {      
          $col = mysql_fetch_field($result, $c);  
          $arr_row[$col -> name] = $row[$col -> name];          
          $c++;
      }  
      $table_result[$r] = $arr_row;
      $r++;
  }  
  return $table_result;
}

?>
 
Top
/dev/random
CAT_IMG Posted on 17/2/2011, 19:45     +1   -1




Allora, facciamo una cosa, fai uno screen della struttura del database da phpmyadmin...
 
Top
FrontBack
CAT_IMG Posted on 17/2/2011, 20:56     +1   -1




eccoti:
SPOILER (click to view)
 
Top
/dev/random
CAT_IMG Posted on 17/2/2011, 21:05     +1   -1




La password immagino che sia in MD5, dati i 32 caratteri...
 
Top
FrontBack
CAT_IMG Posted on 17/2/2011, 21:12     +1   -1




 
Top
/dev/random
CAT_IMG Posted on 17/2/2011, 21:20     +1   -1




Ok, stasera probabilmente ho altro da fare, ma se mi rimangono 10 minuti ci provo xD
 
Top
king-infet[2]
CAT_IMG Posted on 21/2/2012, 19:00     +1   -1




CODE
http://sprunge.us/MYAe


vedi se così ti và io non l'ho provato ma l'ho sistemato un pò (non del tutto)
 
Top
8 replies since 16/2/2011, 17:46   110 views
  Share