Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555

    Sicurezza su passaggio variabili GET

    Salve ragazzi,
    ho un dubbio circa la sicurezza sul passaggio delle Variabili tramite GET. Leggendo le varie guide su possibili attacchi, vorrei capire una cosa. Allora, io ho tutta un'area utenti all'interno di un sito. L'utente si logga, poi viene rimandato ad una serie di pagine personali tramite il passaggio dell'id utente. Ad esempio, ho una pagina carrello, richiamata così:

    www.miosito.it/carrello.php?id=1

    l'id è relativo all'utente 1 in questo caso. Ora da quel che ho capito basterebbe richiamare questo link per poter accedere all'area personale di questo utente. Come fare per impedire che ciò accada?

    Ecco lo script che controlla i dati del login

    Codice PHP:
    <?
    session_start
    ();
    if (isset(
    $_POST['username']) && isset($_POST['password'])) {
    include(
    "config.php");
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("errore nella connessione");
    mysql_select_db("$db_name") or die ("errore nella selezione del database");

      
    $hpw=md5($_POST['password']);
      
    $result=mysql_query("select * from utenti where username='$_POST[username]' and password='$hpw'");
    if (
    mysql_num_rows($result)!=0) {
         
    $valori = @mysql_fetch_assoc($result); //metti i valori del db in un array associativo
         //passa i valori come parametro richiamando la pagina
              
    $_SESSION['username']=$valori['utente_id'];
         
    $_SESSION['nome'] = $valori['nome'];
         
    $_SESSION['cognome'] = $valori['cognome'];
         
    header('location: indexbuy.php?id_gest='.$valori['utente_id'].'');
      } else
        echo 
    "Utente non riconosciuto";
    }
    mysql_close(); 
    ?>
    come vedete il valore dell'id è richiamato dal database con le sessioni user a pass. Poi viene usato per rimandare alla pagine relativa a quell'utente. In questo caso indexbuy.php?............

    Come posso risolvere il problema? Si può nascondere la variabile, ho letto di qualcosa tipo "sessionphp" che viene generata ad ogni login (spero di non aver detto una cavolata), oppure di sessioni che dopo 5 minuti si distruggono ecc.

    Mi potete illuminare?

  2. #2
    Qualsiasi dato in arrivo dall'esterno deve essere validato.

    Nel tuo caso, verifica che l'utente loggato abbia i privilegi necessari per accedere alla pagina richiesta. Ad esempio, verifica che l'id passato sia lo stesso dell'utente loggato.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Nella pagina indexbuy.php faccio questo controllo:

    Codice PHP:
    <?php
    session_start
    ();
    if (@
    $_SESSION['username']!=true
    header("location:loginbuy.php?id_gest=$_GET[id_gest]");
    ?>

    <?php 
    include("config.php"); 
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi"); 
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database"); 
    if(empty(
    $_GET["id_gest"])){
    echo
    "Non hai selezionato nulla";
    }
    else{
    $dati mysql_query("SELECT * FROM utenti WHERE utente_id='".$_GET['id_gest']."'");
    $array mysql_fetch_array($dati);
    echo 
    "Benvenuto "$array['nome'] . " " $array['cognome'];
    }
    mysql_close();

    ?>
    E' corretto? oppure dovrei aggiungere altro?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Nessun suggerimento?

  5. #5
    l'id utente non dev'essere ricavato dai parametri get, basta salvarlo in sessione al momento del login

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ok,
    ho ricavato l'id solo usando la sessione username

    Ho cambiato il file di controllo del login in questo modo:

    Codice PHP:
    <?
    session_start
    ();
    if (isset(
    $_POST['username']) && isset($_POST['password'])) {
    include(
    "config.php");
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("errore nella connessione");
    mysql_select_db("$db_name") or die ("errore nella selezione del database");

      
    $hpw=md5($_POST['password']);
      
    $result=mysql_query("select * from utenti where username='$_POST[username]' and password='$hpw'");
    if (
    mysql_num_rows($result)!=0) {
         
    $valori = @mysql_fetch_assoc($result); //metti i valori del db in un array associativo
         //passa i valori come parametro richiamando la pagina
         
    $_SESSION['nome'] = $valori['nome'];
         
    $_SESSION['cognome'] = $valori['cognome'];
         
    header('location: indexbuy.php?='.$_SESSION['username'].'');
      } else
        echo 
    "Utente non riconosciuto";
    }
    mysql_close(); 
    ?>
    Mentre nella pagina indexbuy.php ho questo codice:

    Codice PHP:
    <?php
    session_start
    ();
    if (@
    $_SESSION['username']!=true
    header("location:loginbuy.php");
    ?>
    <?php 
    include("config.php"); 
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi"); 
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database"); 

    $dati mysql_query("SELECT * FROM utenti WHERE utente_id='".$_SESSION['username']."'");
    $array mysql_fetch_array($dati);
    echo 
    "Benvenuto "$array['nome'] . " " $array['cognome'];
    mysql_close();

    ?>
    Ora l'url della pagina indexbuy mi viene così

    www.miosito.it/indexbuy.php?=3

    Ma non è ugualmente pericoloso dal punto di vista della sicurezza?

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ho appena verificato che se nella barra degli indirizzo digito

    www.miosito.it/indexbuy.php?=3

    vengo rimandato alla pagina di login. Quindi dal punto di vista della sicurezza, almeno in questo senso, dovrei essere a posto. O no?

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Leggendo in giro qua e la sembra che l'applicazione che ho postato sia abbastanza sicura. I certificati ssl possono incrementare la sicurezza?

  9. #9

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ho letto qualcosa in merito (in italiano, l'inglese è un p0' ostico) ed ho fatto varie prove, inserendo diverse stringhe (ad esempio gli apici, clausole OR) nel campo password, ma pare che tutto funzioni bene, in quanto mi dice sempre che l'utente non è registrato.

    Per quanto riguarda quello che ho scritto prima, sono giusti i concetti sulla sicurezza del codice php che ho postato?

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.