• User Attivo

    Consiglio su come fare un controllo..

    Salve ragazzi...
    Purtroppo ho notato una grave falla su un mio script creato per la lettura dei messaggi...

    [php]

    <body>
    <?
    //Apro la sessione e...
    session_start();
    //verifico che dopo il login io abbia la chiave di sessione ad 1
    if($_SESSION['logged']==1){
    //se si...
    //verifico se esiste la variabile id
    if(isset($_GET['id']) OR $_GET['id'] != ""){
    $id=$_GET['id'];
    }

    //mi connetto al datase
    $link = mysql_connect("$db_host", "$db_database", "$db_username", "$db_password") or die("Errore connessione: ". mysql_error());
    //seleziono il database
    mysql_select_db('my_italiawebchat') or die("Errore apertura database: " . mysql_error());

    $sql="SELECT id,nome_inviante,nome_ricevente,messaggio,date,datamessaggio,oramessaggio,emailinviante FROM messaggi WHERE id='".$id."' ORDER BY date";
    $query=@mysql_query($sql) or die (mysql_error());

    while ($array=mysql_fetch_array($query))
    {
    echo "Messaggio da :".$array['nome_inviante']."</a><br><br> Ricevuto ".$array['datamessaggio']." alle ore ".$array['oramessaggio']."<br />
    <br><img class="barradivisione88" src="pulsantinoinvia.png"><br><br> ".$array['messaggio']." ";

    $iddaeliminare=$array['id'];
    echo"
    <br><br><br><br><br><br><a target="contenuto" href="inviamessaggio.php?destinatario=".$array['nome_inviante']."&email=".$array['emailinviante']."" class="nolinea"">Rispondi al messaggio</a>

    <form method="post" action="eliminamess.php">

    <input type="hidden" size="1" name="iddaeliminare" value="$iddaeliminare" /><br>

    <input type="submit" value="Elimina messaggio"></form>

    ";}
    [/php]Il link che compone questa pagina è cosi'
    letturaposta.php?id=4
    e qui sorge la falla...se io modifico nella barra degli indirizzi id=4 con id=5 o id=6 ect...
    leggo i messaggi relativi a quell id anche se non fanno parte della mia posta in arrivo....
    Io dovrei fare in modo di poter leggere solo i messaggi che fanno parte della mia posta in arrivo...quindi se per esempio id=5 e un messaggio che la riguarda la posta in arrivo di nicola io non devo poterlo leggere....come faccio a fare questo controllo..?


  • User Attivo

    A questo punto ti rivolgo un'altra domanda. Come fai ad accedere nella tua, chiamamola così, casella dei messaggi?
    L'unica soluzione, che non ti porterà a poter leggere altri messaggi, è usare le sessioni. Naturalmente facendo prima loggare l'utente ed aggiungendo un campo, riferito all'id utente collegato, nella tabella dei messaggi.

    Se il discorso non è chiaro dovresti capire come funzionano le sessioni.
    Cmq fammi sapere

    CIAO


  • ModSenior

    Ciao Carlitos1982,

    Modifica la query da:
    [php]WHERE id='".$id."'[/php]
    in:
    [php]WHERE id='$id' AND nome_ricevente = '$mionick'[/php]


  • User Attivo

    @Thedarkita said:


    Ho fatto cosi'...e funziona:)
    Se modifico l id nella barra degli indirizzi e inserisco l id di un messaggio che risulta non mi appartenere mi mostra pagina bianca..:)
    Come sicurezza questo metodo credo sia al quanto sicuro si..?


  • ModSenior

    Più sicuro di cosi non si può.
    Comunque su $id dovresti verificare che sia numerico.


  • User Attivo

    [PHP]
    $array['id']=is_numeric($array['id']);[/PHP]

    cosi'..?


  • ModSenior

    Il controllo devi farlo sull'input, altrimenti non ha alcuna utilità:
    [php]
    if(isset($_GET['id']))
    if(is_numeric($_GET['id']))
    $id=$_GET['id'];
    else
    {
    header('Location: index.php');
    exit;
    }
    [/php]Se non è numerico fai un redirect ad un altra pagina.

    Evita di utilizzare:
    [php]
    if(isset($_GET['id']) OR $_GET['id'] != "")
    [/php]In quanto il secondo controllo è inutile.