Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Sicurezza in PHP

  1. #1
    Utente di HTML.it L'avatar di Milver
    Registrato dal
    Dec 2006
    Messaggi
    179

    Sicurezza in PHP

    Salve ragazzi ho ancora una cosa da chiedervi...lo so che domando troppe cose ma grazie a voi riesco a sviluppare il mio script...la mia domanda è, che metodi di sicurezza posso adottare per il login? io faccio che attraverso la parola <form> si mandano i dati ad una pagina e se i dati sono corretti, nella pagina in cui si va vengono impostati i cookie di nome ad esempio "prova".
    Ora quando vado in una pagina ho questo controllo per non far accedere le persone
    Codice PHP:
    <?php
    if ($_COOKIE['prova'] != 'prova') {
    die (
    "Fai prima il login");
    }
    ?>
    Secondo me però è troppo banale per gestire un sistema in php, credo ci voglia qualcosa di piu' sicuro per assicurarsi che nessuno entri nel mio pannello...
    Sapete aiutarmi?
    Mimmo

  2. #2
    beh, direi decisamente dato che basta aggiungere un cookie al proprio browser (e ci sono mille mila modi per farlo)

    dovresti usare le sessioni
    http://it2.php.net/session

    In realtà anche le sessioni su PHP non sono sicure, per niente, soprattutto in hosting condiviso dato che gli hoster, in generale, tengono le sessioni di TUTTI i siti di un server nella stessa cartella

    se vuoi sicurezza elevata, dovresti:
    - usare le SSL, ovvero la comunicazione su HTTPS per inviare il form
    - alternativamente usare una libreria in javascript per il form di login che invii, invece del login, un hash dello stesso con un SALT aggiunto per impossibilitare la lettura dell'utente/password in modo facile (magari un hmac-sha1)
    - usare le sessioni su DATABASE (in modo da permettere l'accesso al contenuto solo all'utente mysql che può accedere al db, ergo tu e l'amministratore)
    - generare un nuovo identificatore di sessione ogni richiesta (in modo da prevenire varie forme di session hijacking)
    - tempi corti per la durata della sessione, non più di 5 minuti, al massimo rifanno il login
    - eliminare sistemi di auto login
    - i cookie che invii crittografali utilizzando ad esempio il serpent, twofish, blowfish, aes e cosi via, sia la chiave sia il contenuto, magari utilizzando un SALT ad hoc per utente che potrebbe essere lo sha1 dell'id della sessione o lo sha1 della chiave della sessione
    - ovviamente niente register global, anzi, verificare che dentro $_REQUEST non ci stiano variabili che inizino per _GET[, _POST[, _SERVER[, _FILES[, _COOKIE[, GLOBAL[ e cosi via in modo da ridurre possibili giochini che si possono fare quando il register global è on (ovvero se sei in hosting sempre)
    - utilizzo corretto dei backslash e dell'escaping per i parametri in entrata e per quelli che vanno a finire al database
    - utilizzo di stripslashes o htmlentities per sistemare quello che si invia al browser, in modo da evitare rischi dovuti a campi malformati dall'utente

    c'è altro, ma per adesso penso possa bastare

  3. #3
    Utente di HTML.it L'avatar di Milver
    Registrato dal
    Dec 2006
    Messaggi
    179
    Scusa mi sai indicare qualche guida che mi spiega come usare il protocollo SSL? anche se è lunga mi cimenterò a leggerla
    Mimmo

  4. #4
    Originariamente inviato da Milver
    Scusa mi sai indicare qualche guida che mi spiega come usare il protocollo SSL? anche se è lunga mi cimenterò a leggerla
    questo, in realtà, è la cosa più semplice per il codice non cambia assolutamente nulla è il webserver che gestisce la comunicazione cifrata

    unica cosa: devi acquistare un certificato se vuoi che un hoster qualsiasi te lo abiliti altrimenti se vuoi fare le prove in locale il certificato te lo puoi generare e, anche se verrai avvisato che è stato emesso da qualcuno non conosciuto, la comunicazione sarà comunque cifrata

  5. #5
    Utente di HTML.it L'avatar di Milver
    Registrato dal
    Dec 2006
    Messaggi
    179
    Capito..quindi se non volessi acquistare il certificato dovrei in alternativa utilizzare la libreria in javascript (mi converrebbe). Siccome non saprei dove vedere, mi linki qualcosa? Mi saresti di GRANDISSIMO aiuto..Grazie mille
    Mimmo

  6. #6
    beh, ovviamente la libreria javascript che vai ad utilizzare non è la soluzione a tutti i mali, però almeno non mandi in chiaro per la rete i dati di accesso

    la cosa è utile (SSL o almeno questo) quando si sta in rete perché è facile tramite software come Ethereal o WireShark fare un attacco di tipo MAN-IN-MIDDLE e farsi inviare tutto il traffico di un pc in entrata ed in uscita leggendo quindi anche questi valori!
    Se i dati invece sono codificati al massimo prende l'hash che, anche se può comunque usare per il login, non ha i dati di accesso in chiaro! Se poi l'hash lo fai variare in base ad un valore che magari trasmetti alla pagina e la libreria JS che fa l'hash lo usa per creare l'hash da inviare almeno hai un minimo di sicurezza in più che c'hai la variazione.

    Ti consiglio di chiedere maggiori info sulla sezione di scripting, riguardo a come usare la libreria JS, però qui c'è il link
    http://www.movable-type.co.uk/scripts/sha1.html

    ed a grandi linee ... ti devi agganciare all'evento onsubmit del form e, quando si verifica l'evento, leggi i valori dalle due caselle di testo, li combini, aggiungi un eventuale terzo valore variabile, crei l'hash, lo setti in un campo del form e svuoti i due campi del form che contengono username e password dopo di che fai un return true per far proseguire l'evento onsubmit

  7. #7
    Utente di HTML.it L'avatar di Milver
    Registrato dal
    Dec 2006
    Messaggi
    179
    Capito..vedrò un pò come fare...invece per quanto riguarda le sessioni leggevo l'articolo su php.html.it ti do il link preciso http://php.html.it/articoli/leggi/87...native-in-php/

    Però ho trovato una difficoltà..nel file start_session.php registra tre variabili
    Codice PHP:
    // Registriamo tre variabili di prova
    $my_session->my_session_register('nome 1''valore 1');
    $my_session->my_session_register('nome 2''valore 2');
    $my_session->my_session_register('nome 3''valore 3'); 
    Cosa sono? Inoltre, se voglio utilizzare questa guida, anzichè registrare queste variabili di prova, come devo registrarle?
    Mimmo

  8. #8
    sull'argomento sessioni c'è un sacco di roba, anche qui sul forum. L'articolo l'ha scritto giancarlo, un grande qui sul forum, oltre che mod della sezione php, però è un pò vecchiotto (anche se comunque rimane validissimo)

    quello che, secondo me, dovresti fare è studiare il funzionamento delle sessioni, cosi come sono su php, in modo da capire il funzionamento base e poi studiare vari modi alternativi per gestirli. Per esempio io ho una classe che gestisce le sessioni su database usando due tabelle, una per le informazioni generali mentre la seconda per le variabili registrate, e la prima tabella è di tipo memory per ottimizzare l'esecuzione

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.