Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Classe PDO

  1. #1

    Classe PDO

    Ciao a tutti e scusate se magari l'argomento risulta trito e ritrito, ma cappero non riesco a capire.
    Ho seguito il tutorial di questa pagina:

    http://culttt.com/2012/10/01/roll-yo...pdo-php-class/

    Ben fatto, e copiando il listato pari pari, lancio tutorial.php funziona egregiamente.
    Ho fatto il mio file.php :

    <?php
    include 'database.class.php';//includo la classe


    $config = parse_ini_file('config.ini');//carico i dati di connessione da config.ini
    define("DB_HOST", $config['server']);
    define("DB_USER", $config['username']);
    define("DB_PASS", $config['password']);
    define("DB_NAME", $config['test']);


    $user = $_POST['user'];//user da cercare
    $password = (string) $_POST['password'];//password dell'user da cercare
    $captchaform = $_POST['captcha'];//captcha che arriva dal form da confrontare
    $iscriveme = isset($_POST['iscriveme']) ? "si" : "no";//richiesta iscrizione


    session_start();// inizio la session


    $captchaphp = $_SESSION["code"]; //leggo valore captcha elaborato da captcha.php


    echo $user ."\n". $password ."\n".$captchaform ."\n".$captchaphp ."\n".$iscriveme."\n";
    //exit();


    $_SESSION["user"] = $_POST['name'];//setto la variabile di sessione user
    $_SESSION["password"] = $_POST['password'];//setto la variabile di sessione password


    if($captchaform == $captchaphp && $iscriveme == "no"){ //captcha giusto niente iscrizione
    echo "ciao";
    $database = new Database();
    $database->query('SELECT * FROM utenti WHERE user = :user');
    $database->bind(':user', $user);
    //$database->bind('assword', $password);
    $rows = $database->resultset();
    echo $database->rowCount();
    $_SESSION['cognome']=$row[3];
    echo "cognome".$row[3];
    $_SESSION['nome']=$row[4];
    $_SESSION['livello']=$row[5];
    $_SESSION['autorizzato']=0;
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $extra = 'entrato.php';
    header("Location: http://$host$uri/$extra");
    die("Your browser does not support redirection. Please go to http://localhost/abc.");
    } elseif($captchaform == $captchaphp && $iscriveme == "si") { //captcha giusto richiesta iscrizione
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $extra = 'iscriçion.php';
    header("Location: http://$host$uri/$extra");
    die("Your browser does not support redirection. Please go to http://localhost/abc.");
    exit();
    } elseif($captchaform !== $captchaphp) { //captcha errato
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $extra = 'entra.php';
    header("Location: http://$host$uri/$extra");
    die("Your browser does not support redirection. Please go to http://localhost/abc.");
    exit();
    }
    ?>

    per usare la classe, ma capperaccio non funziona.
    Le variabili $_POST sono settate, mi stampa a video "ciao", quindi entra nell'if che deve seguire, ma non esce nessun risultato.
    In pratica dalla classe non ottengo risultati, ma e' uguale a quella del tutorial.php, e ho scritto i campi giusti della tabella utenti che nel db esiste. Non capisco, dove potrei sbagliare?
    Grazie Ricky

  2. #2
    Mi rispondo da solo, ho sbagliato qua :

    define("DB_NAME", $config['test']);

    doveva essere :

    define("DB_NAME", $config['dbname']);

    Che picio che sono


  3. #3
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Ecco, ti dico che... è una mezza schifezza, nel senso che se è un pezzo di codice che stai provando OK, in produzione invece ha dei buchi di sicurezza giganteschi che ti costerebbe poco sistemare.

  4. #4
    @brancomat

    Diciamo che se volessi darmi delle dritte sarebbero ben accette

  5. #5
    Il captcha potrei integrarlo nella pagina di login, e al limite anche i controlli sull'esistenza dell'utente. Le Session hanno vulnerabilità?

  6. #6
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Posto che sono niubbissimo per PHP...

    1) la sessione inizializzala subito
    poi...
    Codice PHP:

    $user      
    $_POST['user'];//user da cercare
    $password    = (string) $_POST['password'];//password dell'user da cercare
    $captchaform $_POST['captcha'];//captcha che arriva dal form da confrontare
    $iscriveme   = isset($_POST['iscriveme']) ? "si" "no";//richiesta iscrizione 
    io verificherei se le variabili esistino, se sono vuote, e soprattutto metterei un limite sulla lunghezza,
    per evitare che ti piazzino qualche XSS dentro
    Codice PHP:
    session_start();// inizio la session 
    Credo (non son sicurissimo) che vada all'inizio
    Codice PHP:
    $captchaphp  $_SESSION["code"]; //leggo valore captcha elaborato da captcha.php 
    Ti "fidi" del valore, io invece controllerei che sia giusto, altrimenti se "qualcuno" ti cambia la variabile di sessione te la prendi così
    Codice PHP:
    echo $user ."\n"$password ."\n".$captchaform ."\n".$captchaphp ."\n".$iscriveme."\n";
    //exit(); 
    Mai e poi mai scrivere a video i dati delle variabili (XSS)
    Codice PHP:
    $_SESSION["user"] = $_POST['name'];//setto la variabile di sessione user
    $_SESSION["password"] = $_POST['password'];//setto la variabile di sessione password 
    Stesso discorso, controllerei se son settati, vuoti e troppo lunghi
    Personalmente non passo mai questi dati "lisci" (dalla pagina HTML), bensi invio l'SHA1 (con una libreria javascript).
    Poi controllo lunghezza della stringa, e che sia composta solo da caratteri ASCII esadecimali.

    Codice PHP:
    if($captchaform == $captchaphp && $iscriveme == "no"){ //captcha giusto niente iscrizione
        
    echo "ciao"
    Mi sa che ci vuole === e non ==
    Codice PHP:
        $database = new Database();
        
    $database->query('SELECT * FROM utenti WHERE user = :user');
        
    $database->bind(':user'$user); 
    Metteri un LIMIT 1, poi toglierei * a favore dell'elenco dei campi che ti serve.
    E, già che ci sono, come detto non userei un confronto diretto bensì = degli SHA1 (funzione che in mysql c'è)
    Codice PHP:

        
    //$database->bind('assword', $password); 
    QUi avrei messo un CATCH per intercettare una eccezione (es. database non disponibile e così via)
    Codice PHP:
        $rows $database->resultset();
        echo 
    $database->rowCount(); 
    Qui controllerei il numero delle righe (con LIMIT 1 devono essere 1 e non zero)
    Codice PHP:
        $_SESSION['cognome']=$row[3];
        echo 
    "cognome".$row[3];
        
    $_SESSION['nome']=$row[4];
        
    $_SESSION['livello']=$row[5];
        
    $_SESSION['autorizzato']=0
    Qui sei a rischio perchè se i campi non ci sono (cioè $row non è così lunga) avresti degli errori

  7. #7
    Intanto grazie.
    Alcuni suggerimenti saranno presi in considerazione .
    Alcune cose dipendono però dal fstto che stò riscontrando problemi e quindi cerco di capire dove, tipo la echo che hai sottolineato.
    Mi dici di verificare le $_POST, lo faccio
    $variabile = isset($_POST['variabile'] ? $_POST['variabile'] : "non settato"; (in realtà l'ho fatto dopo il primo post.
    Come fai a mandare i $_POST in sha1? Cioè per esempio per la captcha e la password lo devo fare, ma dici che sia meglio hashare anche l'user?
    La === sul captcha servirebbe perché? Il captcha che viene dal form e quello dalla session sono solo numerici, certo alfanumerici sarebbe meglio e vedrò se farlo.
    La session_start() all'inizio? Per la leggibilità? Perché lì dov'è funziona
    Metterò un controllo sulla lunghezza come suggerito da te, in base al massimo che posso mettere nel record.
    Grazie

  8. #8
    Mi sono dimenticato.
    La Select con * e la $row....
    Con * la row ha tutti i campi e così basta solo trovare il numero del campo, da 0 a N-1

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 © 2025 vBulletin Solutions, Inc. All rights reserved.