Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    51

    Una questione di Sicurezza

    Salve
    è da poco tempo che mi sono affacciato alla programmazione web e php
    per cui mi ponevo una domanda in merito alla sicurezza
    in particolare volevo sapere se per la registrazione di un utente "unico" in un database
    e bene dargli un id tramite autoincrement o assegnarli un id unico abbastanza grande tipo 10 o più cifre tramite qualche script php?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, dipende come usi gli id. Se lo tieni solo per tabella e/o collegamenti fra tabelle non e' un problema un semplice id. Se lo usi per elminare/modificare con qualche query/script e' melgio un controllo piu' sicuro ad esempio id e password, id e tipo utente o id e codice di sicurezza abbinato al record(un po come vuoi). Se vuoi usare solo l'id potresti se mai usare un uniqueid() http://it.php.net/manual/en/function.uniqid.php che ti genera una stringa alfanumerica gia più complessa da indovinare volendo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    51

    una questione di sicurezza

    Grazie della risposta
    in particolare nel mio caso gli utenti possono visualizzare delle aziende tramite il loro id
    con un link
    visualizza_azienda.php?id=CodiceUnico
    quindi il codice unico e visibile da chiunque
    allora secondo te/voi sarebbe bene utilizzare 2 "codici unici" per la stessa azienda uno diciamo da utilizzare solo in "lettura" e l'altro per eseguire "query di aggiornamento o eliminazione"

  4. #4
    ciao,

    l'id numerico impostato come chiave primaria e di tipo auto_increment è sufficiente per gestire correttamente l'univocità delle righe ma potresti aver bisogno di un vincolo di univocità anche su qualche altro campo della tabella: per esempio sul campo "username" della tua tabella utenti potresti impostare un vincolo di integrità di campo di tipo UNIQUE così sarai sicuro che non potranno esserci 2 campi impostati con lo stesso valore.

    dai un occhio qui: http://dev.mysql.com/doc/refman/5.5/...ate-index.html

    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    51
    si grazie
    ma pensavo che se uso un id auto_increment un potenziale attaccante potrebbe facilmente
    individuare un altro id, tipo se il suo è 100 potrebbe provare ad attacarmi con 101, mentre se uso un numero abbastanza grande gli risulterebbe più difficile individuare l'id successivo.

  6. #6

    Re: una questione di sicurezza

    Originariamente inviato da websun
    ...
    visualizza_azienda.php?id=CodiceUnico
    ...
    O mammamia qui il problema non è l'univocità dell'id, ma un'erratissima impostazione dello script php. Non puoi passare gli ID degli utenti in GET, è come lasciare l'uscio di casa aperto e sperare che non entri nessuno!!!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    51
    si hai ragione che è errato passare gli id via Get ma lo volevo fare per faraggiungere l'azienda nei preferiti ecc...
    infatti volevo utilizzare 2 id unici per ogni azienda uno visibile per interrogazioni e l'atro nn visibile da utilizzare solo per eseguire query di update o delete

  8. #8
    Puoi codificare l'id quando lo scrivi e decodificarlo quando lo leggi.
    Ci sono tante funzioni già pronte per questo, ma anche usare un md5 (che salvi nella tabella delle aziende) può andare bene (es md5($nome_azienda . $id_azienda . $data_registrazione_azienda)
    Quando salvi l'azienda calcoli l'md5 e lo salvi nella tabella, quando aggiorni i dati aggiorni anche l'md5, quando scrivi l'id "a video" usi l'md5 dalla tabella, quando ricerchi l'azienda cerchi questo md5 nella tabella

    Conviene comunque che quando ricevi i dati via GET o POST tu faccia una sanitizzazione!

  9. #9
    Ciao,

    il problema della tuo approccio non è tecnico ma di analisi: se vuoi permettere solo ad alcuni utenti di visualizzare determinate informazioni devi operare prima una autenticazione per accedere a determinate pagine del sito e, quindi, a determinati dati.
    Non puoi passare tramite querystring degli id che possono accedere a dati riservati, ti ritoveresti con delle brutte sorprese.
    Potresti creare una funzione tipo:
    function IsUserRegistered() {
    if($_SESSION['USERID'] >0)
    return true;
    }
    che ti ritorna vero se è valorizzata la varibiabile di sessione con il suo id preso dal database (ovviamente che sia > 0), almeno in questo modo potrai passare tramite querystring dati che non devono essere utilizzati da utenti non autenticati.

    ciao

  10. #10
    generalmente se si tratta di un profilo utente privato (a cui non deve avere accesso un utente diverso dal titolare) è necessario fare un login.

    quando si esegue il login con successo si salva in una variabile di sessione l'id di quell'utente.

    a questo punto potrai fare le query facendo riferimento all'id salvato in sessione.

    Questo è il metodo che si usa tradizionalmente. Le cose che hai chiesto non sono efficaci per rendere privati i dati del profilo.

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.