Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    69

    area riservata con sessioni. parere

    ciao, premetto che è la prima volta che affronto le sessioni, e che me la cavo in modo un po maccheronico con php. girando su questo forum ho scopiazzato un po di codici e sono arrivato a realizzare questo:

    login.php
    codice:
    <?
    $nome = $_POST['nome'];
    $password = $_POST['password'];
    $pagina = "amministrazione.php";
    $connection= mysql_connect("xxxxxxx","xxxxxxxx","xxxxxxxx");
    $db=mysql_select_db("xxxxxxxxxx",$connection);
    $query = "SELECT * FROM area_riservata WHERE nome = '$nome' AND password = '$password'";     
        $result = mysql_query($query) or die (mysql_error());     
        $totalrows = mysql_num_rows($result); 
    	if($totalrows == 1){    
        session_start(); 
            $_SESSION['nome'] = $nome;
    		$_SESSION['password'] = $password; 
            print("<script>window.location='".$pagina."'</script>"); 
        } 
    	
    else{
    echo "I dati inseriti non sono presenti nel database.";
    }
    mysql_close($connection);
    ?>
    amministrazione.php (pagina riservata)
    codice:
    <?php 
    $nome = $_POST[$nome];
    $password = $_POST[$password];
    if(session_id() == "") {
     session_start(); 
     } 
    if(!isset($_SESSION['nome']) || $_SESSION['nome'] != $nome || !isset($_SESSION['password']) || $_SESSION['password'] != $password)
    { 
        print("<script>window.location='form.html'</script>"); 
    } 
    ?>
    
    <html>
    <head>
    <title>Documento senza titolo</title>
    </head>
    
    <body>
    <?
    if($_SESSION['nome'] == "a" and $_SESSION['password'] == "1"){
    echo "visualizzo tutto perche chi si è identificato è l amministratore";
    }
    else {
    echo "si è identificato". $nome ." quindi viene visualizzata solo la parte che riguarda lui";
    }
    ?>
    </body>
    </html>
    volevo chiedere se questo sistema può garantire un discreto livello di sicurezza o ci sono altri aspetti che devo tenere in considerazione, e se la parte del <body> di amministrazione.php è corretta o anche questa (includendo i dati dell amministratore) è a rischio.
    confido nella vostra esperienza. ciao a tutti

  2. #2
    stai molto attento che quando un utente si logga può essere anche un hacker che può fare una bella SQL iniection!!! in pratica una query SQL che eprmette tranquillamente all'hacker di entrare magari come administrator immettendo caratteri come ' (apostrofo); per cui fai un controllo delle stringhe immesse come user e password ed emetti un messaggio di errore se c'è ad esempio questo carattere. Per il resto vai a cercare su goggle maggiori info su 'SQL injection'

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Qui c'è un bel po' da lavorare prima di preoccuparsi delle sql injection...

    Il codice della pagina di login può anche andare, soprattutto se togli il salvataggio in sessione della password che non serve a nulla; anche fare il redirect con javascript non è proprio il massimo, ma sorvoliamo....

    Dove proprio non ci siamo è nell'altra pagina.
    Non ha nessun senso prevedere di nuovo in input i dati in $_POST. Dovrebbe forse significare che l'utente deve ridigitare i dati ad ogni pagina? Allora a che serve l'"area" riservata?
    Il controllo di autenticazione è semplicissimo, si verifica se esiste la variabile di sessione con il nome utente e se non esiste si fa il redirect al login. Punto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    69
    grazie per aver risposto
    il ripetersi del $_POST nella seconda pagina è stata una mia dimenticanza che avevo già corretto, in piu ho eliminato la sessione per la password come dice luca200.
    riguardo ai consigli di Emulman ho letto la parte che riguarda le sql injection nel sito. quindi adesso login.php è diventata cosi:
    codice:
    <?
    if (is_numeric($_POST['nome'])) {
    settype($_POST['nome'], 'int'); 
    $nome = $_POST['nome'];
    }
    if (is_numeric($_POST['password'])) {
    settype($_POST['password'], 'int'); 
    $password = $_POST['password'];
    }
    if (preg_match("/^[a-z0-9]{4,12}$/i", $nome) and preg_match("/^[a-z0-9]{4,12}$/i", $password)) {
    $pagina = "amministrazione.php";
    $connection= mysql_connect("xxxxxxxx","xxxxxxxxx","xxxxxxxxxx");
    $db=mysql_select_db("xxxxxxxxxxxx",$connection);
    $query = "SELECT * FROM area_riservata WHERE nome = '$nome' AND password = '$password'";     
        $result = mysql_query($query) or die (mysql_error());     
        $totalrows = mysql_num_rows($result); 
    	if($totalrows == 1){    
        session_start(); 
            $_SESSION['nome'] = $nome;
            print("<script>window.location='".$pagina."'</script>"); 
        } 
    
    else{
    echo "I dati inseriti non sono presenti nel database.";
    }
    mysql_close($connection);
    }
    else {
    echo "i dati inseriti non corrispondono ai requisiti richiesti";
    }
    ?>
    dite che può funzionare o c è altro da tenere in considerazione? volevo dire che l username e le password verranno fornite da me agli interessati, quindi non ci sarà il problema che un utente voglia registrarsi con un carattere particolare.
    ciao e grazie ancora

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.