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

    affidabilità si un sistema di login

    Sono alle prime armi con la programmazione php e sto seguendo un approccio molto pratico (man mano che mi servono imparao nuove funzioni...).
    Con non poca fatica sto riuscendo a creare qualcosina e una di queste è un sistema di accesso ad un pannello di amministrazione.

    PREMESSA: lo script tecnicamente funziona.

    Il punto è che ho "paura" ad utilizzarlo dato le mie ancora precarie conoscenze.
    Quindi le domande che mi/vi pongo sono:
    - garantisce un minimo di sicurezza?
    - quali accorgimenti mi suggerite?
    - è "utilizzabile"?

    Lo script si compone dei seguente file:

    1) il form di inserimento dei dati (questo è l'unico di cui sono mediamente certo che vada bene):

    form.php

    (il file check.js controlla che i campi non siano vuoti)

    Codice PHP:
    <script type="text/javascript" src="js/Check.js">
    <
    form method=post action="access.php" ONSUBMIT="return Check()">



    utente:</p><input type="text" name="nome" size=22>


    password:</p><input type="password" name="passwd" size=22>

    <
    input type="submit" name="invio" value="invio">
    <
    input type="reset" name="cancella" value="cancella"
    2) lo script che verifica i dati immessi nel form:

    access.php

    Codice PHP:
    <?php
    session_start
    ();

    /*se non esistono le variabili fermo tutto*/
    if(isset ($_POST['nome'])){$nome=md5($_POST['nome']);}
    else {Exit(
    "accesso non autorizzato");}

    if(isset (
    $_POST['passwd'])){$passwd=md5($_POST['passwd']);}
    else {Exit(
    "accesso non autorizzato");}

    /*fisso le mie credenziali di accesso*/
    $nome_access=md5("admin");
    $pass_access=md5("pass");

    /*se esatte creo una variabile di sessione chiamata admin=ok e reindirizzo alla pagina index.php*/
    if(($nome==$nome_access)&&($passwd==$pass_access))
            {
            
    $_SESSION['admin']=ok;
            
    header("location: index.php");
            exit();
            }

    /*altrimenti lo rimando al form.php*/
    else{header("location: form.php");}

    ?>
    3) le pagine protette inizieranno tutte con questo piccolo script:

    index.php

    Codice PHP:
    <?php
    session_start
    ();

    /*se la variabile di sessione admin è diversa da ok fermo tutto*/
    if((!isset($_SESSION['admin'])) || ($_SESSION['admin']!=ok)){exit("Accesso non autorizzato");}
    ?>
    <html><body>
    <h1>pagina protetta</h1>
    <a href=logout.php>logout</a>
    </body></html>
    4) infine la pagina di logout:

    logout.php

    Codice PHP:
    <?php
    session_start
    ();
    if((!isset(
    $_SESSION['admin'])) || ($_SESSION['admin']!=ok)){exit("Accesso non autorizzato");}

    session_destroy();
    echo 
    "grazie e arrivederci";
    ?>
    Devo buttare tutto via?? o si salva qualcosa?

  2. #2
    Il tuo codice non è sbagliato. Solo una cosa:

    tutto quel passare per md5 è inutile.

    1. Generalmente si cripta unicamente la password.
    2. Non ha senso avere la password in chiaro nello script e poi passarla per md5. Il senso di criptare una password c'è nella malaugurata ipotesi che qualcuno riesca a leggere il sorgente del file (o se i dati sono nel database, la lista delle password).

    Dunque, io lascerei perdere l'username e sostituirei questo

    $pass_access=md5("pass");

    con

    $pass_access="1a1dc91c907325c69271ddf0c944bc72";

    Se qualcuno dovesse leggere il sorgente, troverebbe solo l'hash, dal quale non è possibile risalire alla password.

    Dunque arriva la password in chiaro dal form, viene passata da md5, e confrontata con la stringa. Così è più corretto.

    Un altro accorgimento sarebbe quello di definire una cartella dove salvare le sessioni. Se non altrimenti specificato, vengono salvate nella cartella tmp del server (che ha il problema di essere condivisa con tutti gli altri siti che girano su quel server). Usa la funzione session_save_path per definire un percorso interno al tuo sito. Questo è più sicuro.

    E poi basta. Si potrebbe dire ancora molto, ma poi bisogna vedere cosa vuoi proteggere con questo sistema, tutto deve essere commisurato. Metteresti la porta blindata del forziere di una banca sul capanno degli attrezzi che hai in giardino?
    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  3. #3
    Ti do ancora alcuni consigli:

    1. C'è un errore. ok lo devi mettere tra virgolette perchè è una stringa. Correggi in tutti i files.
    2. La parte di codice per verificare l'autorizzazione, secondo arte, andrebbe messa in un file separato ed inclusa al bisogno, magari impaccettata in una funzione.

    Codice PHP:
    <?php
    session_start
    ();
    function 
    Auth{
    if((!isset(
    $_SESSION['admin'])) || ($_SESSION['admin']!=ok)){exit("Accesso non autorizzato");}
    }

    ?>
    Quando vuoi verificare l'autorizzazione:

    Codice PHP:
    include "...file.php";
    Auth(); 

    3. Utilizza una identazione prolissa, è molto più chiara.

    Codice PHP:
    <?php
    session_start
    ();

    function 
    Auth
    {
        if((!isset(
    $_SESSION['admin'])) || ($_SESSION['admin'] != "ok"))
        {
            exit(
    "Accesso non autorizzato");
        }
    }

    ?>
    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  4. #4
    Originariamente inviato da mtx_maurizio
    Il tuo codice non è sbagliato.
    Non lo avrei mai detto...

    Originariamente inviato da mtx_maurizio
    tutto quel passare per md5 è inutile.

    etc etc

    $pass_access="1a1dc91c907325c69271ddf0c944bc72";
    effettivamente così è molto meglio... addirittura se smarrissi la password sarei costretto a modificarla!!!

    Originariamente inviato da mtx_maurizio
    session_save_path
    studio un altro pò e poi cerco di applicarla.

    Originariamente inviato da mtx_maurizio
    La parte di codice per verificare l'autorizzazione, secondo arte, andrebbe messa in un file separato ed inclusa al bisogno, magari impaccettata in una funzione.
    l'inclusione lo sapevo... messa sotto forma di funzione non lo sapevo che potesse essere meglio...

    Originariamente inviato da mtx_maurizio
    C'è un errore. ok lo devi mettere tra virgolette perchè è una stringa. Correggi in tutti i files.
    fatto...

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.