Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1

    problema con query al db

    Salve a tutti avrei un problema da sottorvi, io sto sviluppando un sito dinamico e mi sono ritrovato a dover fare la pagina di login per gli utenti che sono registrati sul db. come db sto usando quello di altervista (phpmyadmin), io per fare il login ho creato una pagina apposta dove mi va a controllare se i campi user name e password sono stai compilati se sono stati compilati allora a quel punto mi richiama una funzione ovvero:
    Codice PHP:
    function logIn($user$psw)    
    {        
      
    $queryLogIn="SELECT * FROM user WHERE user='".$user."' AND      psw='".$psw."'"
      
    $resultLogIn=mysql_query($queryLogIn) or die ("Errore nella selezione dell'utente".mysql_error()); 
      
    $n=mysql_num_rows($resultLogIn); 
      if(
    $n>0)       
     {            
        
    session_start(); 
        
    $_SESSION ['user']=$user
        
    header("Location: http://www.ismiartecontemporanea.altervista.org");   
      }else       
     {           
        
    header("Location:login.php?access=no");  
      }    

    Il mio problema è che mi rimanda sempre alla pagina login.php?access=no quindi deduco che la variabile $n sia sempre vuota per ui e quindi penso di aver sbagliato a scrivere la query però ho già scritto altre query praticamente identiche a questa e non ho mai avuto problemi, non riesco davvero a capire perchè la query scritta così non gli vada bene ho controllato più e più volte che i nomi delle variabili ed i nomi di quelo che è contenuto dentro al server fossero esatti e tutto è come dovrebbe essere. Potete aiutarmi? Grazie mille cordiali saluti Luca Martinelli.

  2. #2
    Utente di HTML.it L'avatar di Nexus0100
    Registrato dal
    Aug 2016
    residenza
    Firenze
    Messaggi
    83
    Ciao, allora io ti consiglio di passare a mysqli per scrivere codice più aggiornato diciamo, perché alcune funzioni che usi sono deprecate.
    Io ti consiglio di provare questo codice:
    Codice PHP:
    <?php
    define
    ('HOST''localhost');
    define('USERNAME''admin');
    define('PASSWORD''admin');
    define('DB''database');

    function 
    logIn($user$psw){
          
    // Create connection
          
    $conn = new mysqli(HOSTUSERNAMEPASSWORDDB);
          
    // Check connection
          
    if ($conn->connect_error) {
              die(
    "Connection failed: " $conn->connect_error);
          }
          
    $query "SELECT * FROM user WHERE user = '$user' AND psw = '$psw';";
          
    $result $conn -> query($query);
          if((
    $result -> num_rows) == 1){
            
    session_start();
            
    $_SESSION['user'] = $user
            
    header("Location: http://www.ismiartecontemporanea.altervista.org");
             }
          else{
            
    header("Location: login.php?access=no");
          }
        }
    ?>
    Mentre se vuoi controllare la query per maggiore sicurezza ti consiglio di andare su phpMyAdmin e selezionando la tabella che ti interessa in alto trovi SQL da li puoi lanciare la query scrivendola come dovrebbe essere e vedere cosa succede, per debuggare io consiglio di fare questo nel caso:
    Codice PHP:
    <?php
    define
    ('HOST''localhost');
    define('USERNAME''admin');
    define('PASSWORD''admin');
    define('DB''database');

    function 
    logIn($user$psw){
          
    // Create connection
          
    $conn = new mysqli(HOSTUSERNAMEPASSWORDDB);
          
    // Check connection
          
    if ($conn->connect_error) {
              die(
    "Connection failed: " $conn->connect_error);
          }
          
    $query "SELECT * FROM user WHERE user = '$user' AND psw = '$psw';";
          echo 
    $query;    //così vedi realmente come stai lanciando la query e la puoi testare da phpMyAdmin
          
    $result $conn -> query($query);
          if((
    $result -> num_rows) == 1){
            
    session_start();
            
    $_SESSION['user'] = $user
            
    header("Location: http://www.ismiartecontemporanea.altervista.org");
             }
          else{
            
    header("Location: login.php?access=no");
          }
        }
    ?>
    Spero di essere stato utile e averti fixato questo bug

    Notte e buon fixing

  3. #3
    Credo si debba aggiungere la questione della sicurezza, non so se pulisci le variabili in entrata prima di eseguire la query, per evitare la sql injection, ovvero dare la possibilità di manipolare la stringa sql permettendo il reperimento dei dati dati sensibili nel database o di aggirare il tuo sistema di login.
    Ti faccio un esempio, prova ad inserire nel modulo di login un utente inesistente e come password la seguente stringa:

    codice:
    ' and 1='1
    dovrebbe crearti la sessione ugualmente, sempre che tu non abbia pulito l' input
    Ultima modifica di camionistaxcaso; 23-12-2016 a 12:07

  4. #4
    Utente di HTML.it L'avatar di Nexus0100
    Registrato dal
    Aug 2016
    residenza
    Firenze
    Messaggi
    83
    Quote Originariamente inviata da camionistaxcaso Visualizza il messaggio
    Credo si debba aggiungere la questione della sicurezza, non so se pulisci le variabili in entrata prima di eseguire la query, per evitare la sql injection, ovvero dare la possibilità di manipolare la stringa sql permettendo il reperimento dei dati dati sensibili nel database o di aggirare il tuo sistema di login.
    Ti faccio un esempio, prova ad inserire nel modulo di login un utente inesistente e come password la seguente stringa:

    codice:
    ' and 1='1
    dovrebbe crearti la sessione ugualmente, sempre che tu non abbia pulito l' input
    Quoto hai ragione per quanto riguarda la sicurezza, prima risolviamo il problema poi guardiamo per la sicurezza.
    Nel caso ho provato a fare un injection come quella che dici te e non funziona perché i dati passati nella query sono tra apici e rendono quasi impossibile un injection. Ma se vuoi aumentare la sicurezza basta che utilizzi la funzione
    Codice PHP:
    mysql_escape_string($string

  5. #5
    Scusa ho messo un AND al posto di un OR, basta mettere
    ' OR 1='1
    e la query diventerebbe:
    SELECT * FROM user WHERE user = 'username_inesistente' AND psw = '' OR 1='1'


  6. #6
    Utente di HTML.it L'avatar di Nexus0100
    Registrato dal
    Aug 2016
    residenza
    Firenze
    Messaggi
    83
    Hai ragione ci avevo pensato, però anche se la injection è corretta questo funziona solo nel caso ci sia un utente solo nel db, altrimenti il processo viene fermato all'if del controllo del numero delle righe penso, comunque hai ragione, ovviamente anche la sicurezza è parte fondamentale di un buon sito attendiamo risposte di rockykinotto mi sa per adesso...

  7. #7
    Vi chiedo scusa se vi rispondo con cos� tanto ritardo ma purtroppo come ho scritto il post il mio pc � diventato inutilizzabile e sono riuscito solamente adesso a ricorrere a ripari con un pc di riserva
    Per prima cosa vi voglio ringraziare per il tempestivo aiuto e vi ringrazio per avermi fatto notare dei falli nella sicurezza. Vi voglio avvisare per� che sono nuovo riguardo allo sviluppo di siti web dinamici tramite l'uso di php per questo vi chiedo di avere pazienza.
    Voleva capire una cosa prima della funzione Nexus0100 ha inserito:
    define('HOST', 'localhost');
    define('USERNAME', 'admin');
    define('PASSWORD', 'admin');
    define('DB', 'database');
    Questo serve per far connettere la pagina al DB giusto? se � cos� questa � un'operazione che ho gi� fatto tramite una pagina php che poi vado a richiamare in ogni pagina e l'ho inserita anche nella pagina di Login dove sono presenti i form per far inserire user e psw, in pratica la pagina dove vado a richiamare la funzione logIn, � possibile che sia questo il problema?
    Un'altra domanda, non ho capito molto bene il discorso del
    $result = $conn -> query($query);sopratutto perch� non so a cosa serva ->
    Ma secondo voi perch� in quello che ho scritto io $n non gli risulta >0? Vi chiedo scusa per le domanda che magari a voi potrenno sembrare stupide ma oltre alla soluzione vorrei capire perch� il mio non funziona almeno se imparo bene le domande che vi far� saranno sempre meno stupide
    Grazie di nuovo a tutti per il vostro aiuto.

  8. #8
    Utente di HTML.it L'avatar di Nexus0100
    Registrato dal
    Aug 2016
    residenza
    Firenze
    Messaggi
    83
    Ciao, allora i define() che ho inserito io servono solo per creare le variabili da usare per la connessione al database, era solo per farti vedere come stabilire la connessione con mysqli che è più recente di mysql.
    Il codice
    Codice PHP:
    $result $conn -> query($query); 
    praticamente prendo la connessione ($conn) e tramite l'espressione lambda (penso sia la stessa anche se in c# viene scritta così => ) che chiama la funzione query(), la quale passatogli una stringa contenente la query la esegue.
    Perciò dalla connessione chiamo la funzione query che esegue la query passatogli, il risultato viene posto nella variabile $result.
    Dopo di che per sapere il numero di righe ottenute mi basta fare
    Codice PHP:
    $result -> num_rows 
    e il risultato è pari al numero di righe.
    Nel tuo caso non mi pare sia sbagliato il codice anche se deprecato, ma è più probabile ci sia un errore nella query... Dunque ti consiglio di provare così:
    Vai su PHPMyAdmin e in alto nel menu c'è una sezione chiamata SQL da li puoi eseguire le query direttamente su DATABASE, in questo modo lanciando la tua query
    codice:
    SELECT * FROM user WHERE user = 'username' AND psw = 'password';
    sostituendo ovviamente le variabili PHP con ciò che dovrebbe esserci, e cliccando esegui vedi il risultato della query e se ci sono errori.
    Se non ci dovessero essere errori allora il problema è nel codice...
    Nel frattempo ti consiglio di fare queste prove

    P.S. Sinceramente a me sembra strano che nella tua query sia scritto FROM user WHERE user, questo vorrebbe dire che nella tabella user c'è un campo chiamato user, può darsi che questo dia il conflitto, forse potresti fare FROM user WHERE user.user per specificare il campo user della tabella user. Ma può darsi che questo non sia necessario...
    Ultima modifica di Nexus0100; 23-12-2016 a 23:46 Motivo: Più informazioni

  9. #9
    Scusami mi ero dimenticato di dirti che la prova mettendo la query sul PHPMyAdmin l'ho fatta e tutto torna
    Adesso ho provato a cambiare la funzione scrivendo:
    Codice PHP:
    $query="SELECT * FROM user WHERE user='.$user.' AND psw='.$psw.'";
            
    $login=$conn->query($query);
            if(
    $login->num_row>0){
                
    session_start();
                
    $_SESSION ['user']=$user;
                
    header("Location: http://www.ismiartecontemporanea.altervista.org");
            }else
            {
                
    header("Location:login.php?access=no");
            }

    il problema è che adesso come viene richiamata la funzione come errore mi da:
    Fatal error: Call to a member function query() on a non-object in /membri/ismiartecontemporanea/include/function.php on line 5
    che sarebbe proprio la riga che mi hai spiefgato poco fa.
    Sono io che ho capito male la spiegazione? vi chiedo scusa so che senz'altro sono io che non mi sono accorto di qualcosa o che non ho capito bene come fare.
    Grazie mille dell'aiuto.

  10. #10
    Utente di HTML.it L'avatar di Nexus0100
    Registrato dal
    Aug 2016
    residenza
    Firenze
    Messaggi
    83
    Nono hai capito bene però ti ho scritto la configurazione al DB a posta perché l'oggetto $conn per avere la funzione query() necessita che sia derivato dalla classe mysqli e non mysql, devi collegarti al db attraverso un oggetto mysqli. Dovrebbe essere quello il motivo di questo messaggio di errore mi pare

    P.S. Aggiungo:
    Codice PHP:
    $conn = new mysqli(HOSTUSERNAMEPASSWORDDB);   //Qui non si nota per via della i ma cambia le funzioni associate all'oggetto $conn 

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.