Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Connessione database con utente@password in chiaro?

    Ciao!
    Sto costruendo una semplice applicazione di connessione ad un database MySQL e durante una verifica (in locale) a mezzo var_dump() mi sono accorto di una cosa che prima non mi capitava mai, ovvero nel link di riferimento alla connessione (OOP) non c'è solo l'handle della connessione ma anche la stringa di identificazione del database, il nome utente e la password
    Ecco un esempio: ( var_dump($link); )
    Database Object ( [link] => PDO Object ( ) [pass_Database_private] => Array ( [user] => password [root] => password ) [dsn_Database_Private] => mysql:dbname=bibliography;host=localhost [root_Database_Private] => )
    ---- al posto degli unserscore ( _ ) ci vanno i due punti ( : ) ma mettendoceli il forum mi riempie la stringa di icone ----
    Ovviamente nomi e password qui sono mascherati ma per il resto il mistero resta.
    La classe che ho creata e che mi connette al DB è quella sottostante.
    Codice PHP:
    class Database {
            public 
    $link null;
            private 
    $pass = array('user' => 'password''root' => 'password');
            private 
    $dsn 'mysql:dbname=bibliography;host=localhost';
            public function 
    __construct($utente 'user') {
                try {
                    if (
    $this->link == null) {
                            
    $this->link = new PDO($this->dsn$utente$this->pass[$utente], array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
                            
    $this->link->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODEPDO::FETCH_ASSOC); 
                            
    $this->link->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
                    }
                }    
    //    fine try
                
    catch (PDOException $e) {
                    echo 
    'Connection failed: ' $e->getMessage();
                }
                catch (
    Exception $e) {
                    echo 
    'Connection failed: ' $e->getMessage();
                }
            }    
    //    __construct()
            
    public function __destruct() {
                unset(
    $this->link);
                
    $this->root false;
            }    
    //    __destruct
        
    }    //    Fine classe database 
    richiamata mediante
    Codice PHP:
    $link = new Database(); 
    e se faccio il var_dump() alla variabile $link mi esce quella roba e non mi era mai successo prima di ora (versione attuale del PHP 5.4.16 (MySQL 5.0.10).
    Qualcuno me la sa spiegare cortesemente?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Di certo non dipende da come hai scritto la classe, $link viene creata da PDO.
    Ad ogni modo non vedo il problema: perché qualcuno possa sfruttare questa cosa per conoscere username e password del tuo db, deve essere in grado di mettere dei file php con le istruzioni giuste sul tuo spazio web... e se uno riesce ad accedere al tuo spazio web poco importa che quei dati nella variabile $link ci sono oppure no, tanto il tizio in questione ha accesso a tutti i tuoi file e può leggersi i dati di quello che vuole.

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Si ma perché lo fa, prima non capitava, non è la prima volta che faccio una cosa del genere.
    Inoltre $link non apre il database, se lo metto diretto tipo $handle = $link->prepare($query); mi da come errore
    Fatal error: Call to undefined method Database:repare() in C:\WWW\StilisticaMente\BIZ\SM_TOOLS\bibliography.p hp on line 76
    se provo a inserire $handle = $link['link']->prepare($query); mi da ancora errore ma questa volta
    Fatal error: Cannot use object of type Database as array in C:\WWW\StilisticaMente\BIZ\SM_TOOLS\bibliography.p hp on line 76
    ed ha ragione, ma non riesco a sfruttare l'accesso al DB in nessun modo.

  4. #4
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Comunque ho modificata la classe, ora mi restituisce solo e unicamente il link all'handle di connessione (almeno dovrebbe), ho tolto le variabili private e inseriti debitamente i valori in __construct senza usare dei nomi globali alla classe.
    Il problema però rimane e non comprendo il perché.
    Tanto per tagliare la testa al toro ho creata una connessione diretta al database senza passare per la classe che ho costruita e funziona benissimo.
    Come dire, pur non comprendendo il perché del suo comportamento (per ora) mi adeguo e costruisco una semplice funzione. Non mi piace arrendermi ma non posso nemmeno fermarmi troppo.

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.