Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Undefined variable e query con cookie

    Ho riscontrato, ultimamente, un notice da parte di PHP per quanto riguarda la non definizione di alcune variabili in GET.
    Ho risolto il tutto inserendo questo nel file
    Codice PHP:
    error_reporting (E_ALL E_NOTICE); 
    Però vorrei sapere se realmente mi causerà qualche problema tutto ciò...

    Questa è la pagina, collegata ad altri file che elaborano le richieste dei form...

    Codice PHP:
    <?php
    error_reporting 
    (E_ALL E_NOTICE);
    require(
    "inc/functions.php");
    require(
    "inc/config.php");
    /* Gestione Richieste. Codice di D'Alberti Luca */
    /*     Copyright © D'Alberti Luca 2013          */

    /* SCELTA DEL TITOLO DELLA PAGINA */

    if (! $_GET['action'])
    {
        
    $title "Inserisci i tuoi dati";
    }
    elseif (
    $_GET['action'] == "new_req")
    {
        
    $title "Nuova richiesta";
    }
    elseif(
    $_GET['action'] == "view")
    {
        if (
    $_GET['code'])
        {
            
    $title "Visualizzando richiesta";
        }
    }
    else
    {
        
    header("Location: req_management.php");
    }

    ?>
    <html>
    <head><title><?php echo $title?></title></head>
    <body>
    <?php


    if (! $_GET['action'])
    {
        
    /* Inserisci i dati per il login alla tua area riservata */
        
        
    echo '<form method="POST" action="login.php">';
        echo 
    '<table><tr><td>Indirizzo E-Mail:</td><td><input type="text" name="email" /></td></tr>';
        echo 
    '<tr><td>Codice richiesta:</td><td><input type="text" name="codice" /></td></tr>';
        echo 
    '<tr><td colspan="2"><input type="submit" value="Entra" /></td></tr></table></form>';
        if (
    $_GET['error'] == "invalid_mail")
        {
            echo 
    '<script>alert("Inserisci un indirizzo email valido")</script>';
        }
        if (
    $_GET['error'] == "no_fill")
        {
            echo 
    '<script>alert("Compila tutti i campi")</script>';
        }
        if (
    $_GET['error'] == "not_exist")
        {
            echo 
    '<script>alert("I dati inseriti per il login sono errati")</script>';
        }
        if (
    $_GET['error'] == "not_logged")
        {
            echo 
    '<script>alert("Non hai puoi accedere a quest\'area. Effettua l\'accesso.")</script>';
        }
    }
    elseif (
    $_GET['action'] == "new_req")
    {
        
    /* Invia una nuova richiesta */
        
        
    $queryCategorie mysqli_query($db"SELECT * FROM categorie") or die(mysqli_error());
        echo 
    '<h1>Invio di una nuova richiesta</h1>

    '
    ;
        echo 
    '<form method="POST" action="new_req.php">';
        echo 
    '<table><tr><td>Nome / Ragione sociale:</td><td><input type="text" name="nome" /></td></tr>';
        echo 
    '<tr><td>Email:</td><td><input type="text" name="email" /></td></tr>';
        echo 
    '<tr><td>Tipo di richiesta:</td><td><select name="tipo">';
        while (
    $categoria mysqli_fetch_array($queryCategorie))
        {
            echo 
    "<option value=\"$categoria[id]\">$categoria[descrizione]</option>";
        }
        echo 
    '</select></td></tr>';
        echo 
    '<tr><td>Informazioni aggiuntive:</td><td><textarea rows="4" cols="50" name="add_info></textarea>';
        echo 
    '<tr><td colspan="2"><input type="submit" value="Procedi" /></td></tr></table></form>';
        if (
    $_GET['error'] == "invalid_mail")
        {
            echo 
    '<script>alert("Inserisci un indirizzo email valido")</script>';
        }
        if (
    $_GET['error'] == "no_fill")
        {
            echo 
    '<script>alert("Compila tutti i campi")</script>';
        }
    }


    /* Sta visualizzando la richiesta */

    elseif ($_GET['action'] == "view")
    {
        if (
    $_GET['code'])
        {
            if (! 
    $_COOKIE['email'] || ! $_COOKIE['codice'])
            {
                
    header("Location: req_management.php?error=not_logged");
            }
            else
            {
                if (
    chkEmail($_COOKIE['email']))
                {
                    
    $email $_COOKIE['email'];
                }
                else
                {
                    
    header("Location: req_management.php?error=invalid_mail");
                }
                
    $codice mysqli_real_escape_string($_COOKIE['codice']);
                
    $queryRichiesta mysqli_query("SELECT * FROM request WHERE codice = ".$codice." AND email = ".$email."") or die(mysqli_error());
                
    $richiesta mysqli_fetch_array($queryRichiesta);
                
    $queryTipo mysqli_query("SELECT descrizione FROM categorie WHERE id = ".$richiesta[tipo]."") or die(mysqli_error());
                
    $tipo mysqli_fetch_array($queryTipo);
                echo 
    "<table><tr><td>Nome / Ragione sociale: $richiesta[nome] 

                      Indirizzo e-mail: 
    $richiesta[email] 

                      Tipo di richiesta: 
    $tipo[descrizione] 

                      Data: 
    $richiesta[giorno] 

                      </td>
                      <td>
    $richiesta[add_info] 
    </td></tr></table>"
    ;
                
    $queryRisposte mysqli_query("SELECT * FROM risposte WHERE rid = ".$richiesta[rid]."") or die(mysqli_error());
                if (
    mysqli_num_rows($queryRisposte) == 0)
                {
                    echo 
    '

    <h2>Ancora nessuna risposta ricevuta</h2>

    '
    ;
                }
                else
                {
                    while(
    $risposta mysqli_fetch_array($queryRisposte))
                    {
                        echo 
    '<table>';
                        echo 
    '<tr>';
                        echo 
    "<td>Risposta inviata da: $risposta[autore] 

                              Data: 
    $risposta[giorno] 
    "
    ;
                        echo 
    '</td><td>';
                        echo 
    "$risposta[testo] 
    "
    ;
                        echo 
    '</td></tr></table>';
                    }
                }
                echo 
    '<h1>Invia una risposta</h1>
    '
    ;
                echo 
    '<form method="POST" action="new_reply.php"><table><tr><td>Autore:</td><td><input type="text" name="autore" /></td></tr>';
                echo 
    '<tr><td colspan="2">Messaggio: 
    <textarea name="messaggio" rows="10" cols="75"></textarea></td></tr>'
    ;
                echo 
    '<tr><td colspan="2" align="right"><input type="submit" value="Invia risposta" /></td></tr></table></form>';
                if (
    $_GET['status'] == "ok_new_reply")
                {
                    echo 
    '<script>alert("Risposta inserita con successo")<script>';
                }
                if (
    $_GET['status'] == "no_fill")
                {
                    echo 
    '<script>alert("Compila tutti i campi")<script>';
                }
            }
        }
    }
    ?>
    Inoltre, questa query dite che sia abbastanza rischiosa??

    Codice PHP:
    if (chkEmail($_COOKIE['email']))
                {
                    
    $email $_COOKIE['email'];
                }
                else
                {
                    
    header("Location: req_management.php?error=invalid_mail");
                }
                
    $codice mysqli_real_escape_string($_COOKIE['codice']);
                
    $queryRichiesta mysqli_query("SELECT * FROM request WHERE codice = ".$codice." AND email = ".$email."") or die(mysqli_error()); 

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    I notice non sono di per se un problema, ti consiglio però di scrivere codice che non ne generi, perchè cosi sai sempre cosa contiene una variabile.

    Per intenderci, questo codice:
    codice:
    echo $var;
    genera un notice se $var non è stata inizializzata, basta cambiarlo cosi:

    codice:
    $var = '';
    echo $var;
    L'esempio è banale, ma rende l'idea.

    Per l'altra domanda, non mi sono letto tutto il codice, spero che se quella pagina è di un pannello amministrativo prima di tutto controlli da qualche parte di essere loggato.

    L'idea di passare dei dati ad una query senza controllarli è sempre sbagliato.

    Quindi, come prima cosa controllerei la validità sintattica del cookie che contiene la mail, non vorrai che qualcuno ci metta dei caratteri speciali o manipoli la query vero?

    L'altro problema possibile è di logica, non conosco la tua applicazione, ma tutti quelli che accedono a questa pagina possono vedere tutti i dati? Cosa succede se manipolo il cookie cambiando l'indirizzo email o il codice? Accedo a dei dati a cui non dovrei poter accedere? Se si c'è un altro problema, e dovresti controllare anche che l'email o il codice (o la coppia) si tra quelle a cui io ho effettivamente diritto di accedere.

    ciao

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.