Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problema query

  1. #1

    Problema query

    Ciao a tutti, devo selezionare una colonna che però è una variabile.. come faccio?

    ...
    $var = $_GET['var'];
    $id = "$_GET[id]";

    require("conn.php");
    try { $connessione = new PDO ("mysql:host=$host;dbname=$db; charset=utf8", $user, $password);
    $connessione->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $query = $connessione->prepare("SELECT ? FROM tabella WHERE tabella.id = ?");
    $query -> execute(array($var, $id));
    $connessione = null; } catch(PDOException $e) { echo $e->getMessage(); die(); }

    $reg = $query->fetch();
    ...

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Nel prepare, metti direttamente $var al posto del primo "?"

    Secondo me, ti esponi a qualche problema di sicurezza se non verifichi e validi attentamente quello che ricevi via GET

  3. #3
    Grazie per la risposta.. Filtrare il GET con una regex è sufficiente?

  4. #4
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da magic_key Visualizza il messaggio
    Grazie per la risposta.. Filtrare il GET con una regex è sufficiente?
    Ovviamente ni.

    Iniziamo col dire che la cosa più furba che puoi fare (se la puoi fare) è usare numeri, interi, e NON stringhe per i parametri, ovunque puoi.

    Questa mossa ti consente di (regex o ciclo come vuoi) "purgare" tutto quanto non siano cifre, il che taglia via un bel po' di problemi di sicurezza.

    Se non puoi, allora almeno crea una enumerazione all'interno di cui scegliere (chessò var può valere pippo,pluto o paperino, quindi verificherai con cura che valga uno di questi valori, e non qualsiasi).

    I problemi più grossi saltano fuori quando accetti "qualsiasi cosa" in input, invece di forzarlo ad essere solo, e solamente, come vuoi che sia.


    Poi, visto che usi PDO, perchè utilizzi il secondo ? invece di un :qualcosa?
    Inoltre NON stampare il messaggio d'errore a video (in produzione) per non fornire informazioni utilissime su come "bucare" meglio il sito
    Ultima modifica di MySQL; 08-08-2015 a 18:07

  5. #5
    Si, in effetti con $_GET carico l'ID presente nel database, ma $var fa riferimento ad una piccola stringa.. Per $var conviene fare qualcosa del genere?

    codice:
    if ($var == ("pippo" || "paperino" || "topolino")) {
    	...
    	*query*
    	...
    	}
    else {
    	...
    	}
    Mi sa che è comunque meglio come dici tu, ossia associare una numerazione al loro posto..

    Per evitare di stampare a video eventuali errori mi basta cancellare echo $e->getMessage(); giusto?

  6. #6
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da magic_key Visualizza il messaggio
    Si, in effetti con $_GET carico l'ID presente nel database, ma $var fa riferimento ad una piccola stringa.. Per $var conviene fare qualcosa del genere?

    codice:
    if ($var == ("pippo" || "paperino" || "topolino")) {
        ...
        *query*
        ...
        }
    else {
        ...
        }
    Mi sa che è comunque meglio come dici tu, ossia associare una numerazione al loro posto..

    Per evitare di stampare a video eventuali errori mi basta cancellare echo $e->getMessage(); giusto?
    Sì.
    Magari ti basta un -1 come errore generico tornato dai vari die.

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.