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

    Curiosità $_POST, $_GET

    Buon giorno, ho questa curiosità.
    Per passare dei valori da una pagina all'altra,attraverso un form si utilizzano i classici $_POST e $_GET.
    Nella pagina che riceve questi valori, ho fatto sempre in questo modo:
    Codice PHP:
    $bEliminaimg        $_POST['bEliminaimg'];
    $txtStatus            $_POST['txtStatus'];
    $txtArgomento         $_POST['txtArgomento']; 
    Domanda: cosi è corretto oppure c'è un'altro modo?
    Nel senso, tutte le pagine che ricevono questi valori sono strutturate in questo modo:
    1) è sbagliato oppure è corretto?
    2) c'è altro modo più performante e/o più sicuro?
    3) cosi facendo incorro in qualche problema?

    Grazie mille e buona giornata....

  2. #2
    No, questo è il modo corretto per recuperare i valori.
    Se poi parliamo di sicurezza, chiaramente bisogna vedere che fine faranno quei valori ed agire di conseguenza. Come regola generale, i dati in entrata vanno filtrati. Che significa verificarne la validità (se ci aspettiamo un numero ad esempio, che sia un numero). Se poi i dati vanno a finire nel database, va fatto l'escape.
    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  3. #3
    fare l'escape?
    E cioè?

  4. #4
    Nel senso che le stringhe in entrata, se non filtrate correttamente, si prestano a dare lugo ad attacchi mediante sql injection. Se non sai di cosa sto parlando, leggi questo

    http://www.mtxweb.ch/php_learn/?p=864
    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  5. #5
    praticamente se faccio in questo modo?
    Codice PHP:
    SELECT FROM users WHERE username='".trim($user)."' AND password='".trim($psw)."' 
    solitamente, quando necessario, magari per i quei campi dove c'è la necessità che l'utente digiti frasi tipo:
    Codice PHP:
    //Titolo: autore dell'anno
    //Testo: l'acciaio e l'acqua l'elemento etc etc

    //praticamente, all'atto dell'inserimento nel DB aggiungo dei backslash:
    $titolo trim(addslashes($titolo));
    $testo trim(addslashes($testo));

    //nel momento della visualizzazione li tolgo
    $titolo trim(stripslashes($titolo));
    $testo trim(stripslashes($testo)); 
    grazie ancora

  6. #6
    Mhh, la cosa è un po' più complessa

    Tu ne parli come se fosse unicamente un problema di apici che possono creare problemi alla query, in realtà è un problema di sicurezza molto serio.
    Leggi con attenzione l'articolo che ti ho postato ed approfondisci l'argomento. addslashes non ti mette definitivamente al riparo da rischi come quelli descritti nell'articolo. Sulle stringhe va usato mysql_real_escape_string, valutando lo stato di magic_quotes_gpc

    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  7. #7
    ho trovato questo tutorial:
    Codice PHP:
    <?php
    if($_POST) {
    inserisci_record();
    }
    else {
    mostra_form();
    }

    function 
    inserisci_record()
    {
    // richiamo il file di configurazione
    require 'config.php';
    // richiamo lo script responsabile della connessione a MySQL
    require 'connect.php';

    // recupero i campi di tipo "stringa"
    $nome      trim($_POST['nome']);
    $email     trim($_POST['email']);
    $messaggio trim($_POST['messaggio']);

    // verifico se devo eliminare gli slash inseriti automaticamente da PHP
    if(get_magic_quotes_gpc())
    {
    $nome      stripslashes($nome);
    $email     stripslashes($email);
    $messaggio stripslashes($messaggio);
    }

    $nome      mysql_real_escape_string($nome);
    $email     mysql_real_escape_string($email);
    $messaggio mysql_real_escape_string($messaggio);

    // recupero gli altri campi del form
    $sesso      = isset($_POST['sesso']) ? intval($_POST['sesso']) : 0;
    $newsletter = isset($_POST['newsletter']) ? 0;
    $attivita   intval($_POST['attivita']);

    // verifico la presenza dei campi obbligatori
    if(!$nome)
    {
    $messaggio urlencode("Non hai inserito il nome");
    header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
    exit;
    }

    // preparo la query
    $query "INSERT INTO utenti (nome,email,sesso,newsletter,attivita,messaggio)
    VALUES ('
    $nome','$email',$sesso,$newsletter,$attivita,'$messaggio')";

    // invio la query
    $result mysql_query($query);

    // controllo l'esito
    if (!$result) {
    die(
    "Errore nella query $query: " mysql_error());
    }

    // recupero l'id autoincrement generato da MySQL per il nuovorecord inserito
    $id_inserito mysql_insert_id();

    // chiudo la connessione a MySQL
    mysql_close();

    $messaggio urlencode("Inserimento effettuato con successo (ID=$id_inserito)");
    header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
    }

    function 
    mostra_form()
    {
    // mostro un eventuale messaggio
    if(isset($_GET['msg']))
    echo 
    '[b]'.htmlentities($_GET['msg']).'[/b]

    '
    ;
    ?>
    <form name="form_registrazione" method="post" action="">
    <label>nome:
    <input name="nome" type="text" />
    </label>
    (obbligatorio)



    <label>email:
    <input name="email" type="text" />
    </label>
    </p>


     Sesso:
    <label>
    <input type="radio" name="sesso" value="1" />
    M</label>
    <label>
    <input type="radio" name="sesso" value="2" />
    F</label>
    </p>



    <label>inviami newletter:
    <input name="newsletter" type="checkbox" value="1" />
    </label>
    </p>



    <label>attivit&agrave;:
    <select name="attivita">
    <option value="0">:: seleziona ::</option>
    <option value="1">studente</option>
    <option value="2">lavoratore</option>
    <option value="3">disoccupato</option>
    </select>
    </label>
    </p>



    <label>messaggio:

    <textarea name="messaggio" cols="40" rows="5"></textarea>
    </label>
    </p>



    <input name="invia" type="submit" value="Invia" />
    </p>
    </form>
    <?php
    }
    ?>
    In questo modo dici di proteggere:
    Codice PHP:
    if(get_magic_quotes_gpc())
    {
    $nome      stripslashes($nome);
    $email     stripslashes($email);
    $messaggio stripslashes($messaggio);
    }

    $nome      mysql_real_escape_string($nome);
    $email     mysql_real_escape_string($email);
    $messaggio mysql_real_escape_string($messaggio); 
    e poi alla fine passare quei valori, diciamo cosi "protetti" da mysql_real_escape_string, nella SELECT per l'autenticazione?

  8. #8
    ho trovato questo tutorial:
    Codice PHP:
    <?php
    if($_POST) {
    inserisci_record();
    }
    else {
    mostra_form();
    }

    function 
    inserisci_record()
    {
    // richiamo il file di configurazione
    require 'config.php';
    // richiamo lo script responsabile della connessione a MySQL
    require 'connect.php';

    // recupero i campi di tipo "stringa"
    $nome      trim($_POST['nome']);
    $email     trim($_POST['email']);
    $messaggio trim($_POST['messaggio']);

    // verifico se devo eliminare gli slash inseriti automaticamente da PHP
    if(get_magic_quotes_gpc())
    {
    $nome      stripslashes($nome);
    $email     stripslashes($email);
    $messaggio stripslashes($messaggio);
    }

    $nome      mysql_real_escape_string($nome);
    $email     mysql_real_escape_string($email);
    $messaggio mysql_real_escape_string($messaggio);

    // recupero gli altri campi del form
    $sesso      = isset($_POST['sesso']) ? intval($_POST['sesso']) : 0;
    $newsletter = isset($_POST['newsletter']) ? 0;
    $attivita   intval($_POST['attivita']);

    // verifico la presenza dei campi obbligatori
    if(!$nome)
    {
    $messaggio urlencode("Non hai inserito il nome");
    header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
    exit;
    }

    // preparo la query
    $query "INSERT INTO utenti (nome,email,sesso,newsletter,attivita,messaggio)
    VALUES ('
    $nome','$email',$sesso,$newsletter,$attivita,'$messaggio')";

    // invio la query
    $result mysql_query($query);

    // controllo l'esito
    if (!$result) {
    die(
    "Errore nella query $query: " mysql_error());
    }

    // recupero l'id autoincrement generato da MySQL per il nuovorecord inserito
    $id_inserito mysql_insert_id();

    // chiudo la connessione a MySQL
    mysql_close();

    $messaggio urlencode("Inserimento effettuato con successo (ID=$id_inserito)");
    header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
    }

    function 
    mostra_form()
    {
    // mostro un eventuale messaggio
    if(isset($_GET['msg']))
    echo 
    '[b]'.htmlentities($_GET['msg']).'[/b]

    '
    ;
    ?>
    <form name="form_registrazione" method="post" action="">
    <label>nome:
    <input name="nome" type="text" />
    </label>
    (obbligatorio)



    <label>email:
    <input name="email" type="text" />
    </label>
    </p>


     Sesso:
    <label>
    <input type="radio" name="sesso" value="1" />
    M</label>
    <label>
    <input type="radio" name="sesso" value="2" />
    F</label>
    </p>



    <label>inviami newletter:
    <input name="newsletter" type="checkbox" value="1" />
    </label>
    </p>



    <label>attivit&agrave;:
    <select name="attivita">
    <option value="0">:: seleziona ::</option>
    <option value="1">studente</option>
    <option value="2">lavoratore</option>
    <option value="3">disoccupato</option>
    </select>
    </label>
    </p>



    <label>messaggio:

    <textarea name="messaggio" cols="40" rows="5"></textarea>
    </label>
    </p>



    <input name="invia" type="submit" value="Invia" />
    </p>
    </form>
    <?php
    }
    ?>
    Dici di proteggere come nel modo che posto di seguito?
    Codice PHP:
    if(get_magic_quotes_gpc())
    {
    $nome      stripslashes($nome);
    $email     stripslashes($email);
    $messaggio stripslashes($messaggio);
    }

    $nome      mysql_real_escape_string($nome);
    $email     mysql_real_escape_string($email);
    $messaggio mysql_real_escape_string($messaggio); 
    e poi alla fine passare quei valori, diciamo cosi "protetti" da mysql_real_escape_string, nella SELECT per l'autenticazione?

  9. #9
    Sì, così va bene.
    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    scusate se m'intrometto...stavo giusto affrontando questo argomento e non riesco a capire una cosa nello script che ho creato..Nel mio caso non inserisco su db ma passo dei valori da una pagina all'altra con post. Ecco il codice, l'ho semplificato molto e se lo copiate in un file nuovo e lo salvate in .php potete testarlo in prima persona :

    Codice PHP:
    echo "<form action= " $_SERVER['PHP_SELF'] ." method='POST'>";
    $nome "D'Antoni";
    $nome_db addslashes($nome);
    echo 
    "<select name='prova'><option selected value=''>cognome...</option>";
    echo 
    "<option value='".$nome_db."' size=8>$nome</option>";
    echo 
    "</select>
    "
    ;
    echo 
    "<button type='submit' name='invia'>invia</button>";
    echo 
    "

    </p>"
    ;

    if(isset(
    $_POST['prova']) && $_POST['prova']!='') { 
      
    $valoreIns $_POST['prova']; 
      echo 
    stripslashes($valoreIns) ."
    "
    ;

    perchè alla fine mi stampa D e non D'Antoni ??
    io ho il magic_quotes_gpc disattivato, uso addslashes (oppure ho provato anche con mysql_real_escape_string) per salvare il valore da passare tramite post e aggiungere l'escape (e lo fa correttamente) e stripslashes quando lo vado a visualizzare...perchè non funziona? dove il problema?

    PS: non volevo creare una nuova discussione visto che siamo in tema, ma se ho pensato male ne creo una.

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.