Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Sicurezza sito

  1. #1
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127

    Sicurezza sito

    Ciao,
    sto progettando un sito web ma non essendo molto esperto in sicurezza, vi chiedo gentilmente da quali vulnerabilitá dovrei proteggerlo (almeno inizialmente) considerando che per adesso oltre a registrazione, login e commenti non ci sará altro.

    Alcune le conosco:

    sql injection
    xss
    csrf

    altre no.
    Non ho la pretesa di conoscerle tutte ma di partire giá con un sito sufficientemente sicuro, almeno per attacchi piú banali.
    Secondo il mio modesto parere sarebbe oltretutto inutile proteggerlo da attacchi non soliti, usati solo per violare siti di un certo calibro.
    Una base mi basta.

    Ripeto,
    al momento solo per registrazione, login e commenti. (NO upload, email, ecc...)

    Mi basta anche solo il nome delle vulnerabilitá, per ora non mi occorrono script o spiegazioni.

    Vi ringrazio,
    Andrea

  2. #2
    Ciao, qui trovi un mondo.. Buona fortuna

    https://www.owasp.org/index.php/OWAS...t_Sheet_Series
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,574
    Il link che ha inserito alkatraz è già di per se una sicurezza ma è anche estremamente complesso, ovvero, se devi stare attento a tutto è meglio che ti chiudi in casa
    Quelle che hai indicate come problematiche sono per lo più le più "quotate" come problematiche e risolte queste sei ad un ottimo punto.
    Tieni anche presente che per attaccare un sito "di un certo calibro" come lo definisci tu, prima si attacca un sito come il tuo e poi si attacca il sito di un certo calibro da lì, quindi meglio sempre stare protetti o comunque mettere in essere una serie di sicurezze tali da stare tranquilli.
    L'importante è mettere in pratica delle best practice e seguirle sempre, così hai due risultati non banali:
    1. semplificazione: quando ti impadronisci di una tecnica per quanto complessa sia, poi ti viene facile;
    2. facilità di modifica: seguire delle linee guida ti permette di aggiornarle continuamente modificando solo pochi punti salienti.


    Io solitamente faccio così:


    1. registrazione: creazione del database:
      • tabella ( id_utente, nome, cognome, età, sesso, email, password, salt, data_iscrizione, posizione, note );
      • id_utente: autoincrement e chiave primaria
      • nome, cognome, età, sesso, email, sono gli unici dati che inserisce l'utente in fase di iscrizione; gli altri li genero io.
      • password e salt: ( se non sai cosa è il salt, è un numero casuale, un ID che viene sommato alla password prima di fare l'hash della medesima ). Non usare le funzioni del database per realizzare l'hash delle password ma usa uqelle builtin del PHP, vedi: la funzione hash.
      • data_iscrizione, è banale.
      • posizione e note: posizione è un tinyint che può essere -1= utente bannato, 0=non iscritto ( default), 1= iscritto, 2=amministratore, ecc. Note è l'unico campo che può stare a NULL e serve all'amministratore per inserire eventuali note per l'utente, ad esempio il motivo di un eventuale ban.

    Ovvio che non sei obbligato a seguire queste mie linee guida, poi dipende da cosa vuoi realizzare; di solito me la complico ancora mettendo i campi password e salt in tabelle diverse, tieni presente che per estrema sicurezza dovrebbero stare in database separati e possibilmente su hosting diversi, ovvero computer diversi ( non sullo stesso VPN ) e meglio ancora in nazioni diverse! Tu non lavori alla CIA giusto? Nemmeno io
    Comunque queste informazioni su OWASP le trovi.

  4. #4
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127
    Quote Originariamente inviata da Marcolino's Visualizza il messaggio
    password e salt: se non sai cosa è il salt...
    Ringrazio entrambi per le info ricevute.

    Il salt so cos'è e normalmente lo uso così:

    $psw = sha1(salt unico).sha1(password).sha1(salt unico differente);

    Vedo che esistono anche sha256 e password_hash di php.
    Meglio utilizzare una di queste al posto del sha1?

    Avrei ancora un dubbio,
    per evitare registrazioni automatiche da parte di bot, devo necessariamente inserire un captcha o simili
    oppure basterebbe inviare un'email all'utente per la conferma della registrazione
    e soltanto dopo aver confermato risultare registrato?

    Grazie ancora,
    Andrea
    Ultima modifica di andreto; 18-03-2016 a 14:39

  5. #5
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,574
    Allora, sha1() per la sicurezza ha lo stesso esito di md5(), ovvero non usarlo.
    Poi ovvio dipende da cosa devi fare, e quale potrebbe essere il target finale del tuo sito, ma parlando di best practice costa nulla usare sha1() o hash( 'sha256', ... ) o superiore.
    All fine ti ritrovi un prodotto con una sicurezza intrinseca superiore, poi ovvio che se la password è quella dell'agente segreto Panariello, il codificarla a 16/32/64/128/256/enne byte di roba non conta nulla.
    Per prima cosa una password deve essere lunga almeno 8 caratteri per stare ragionevolmente sicuri per un bel pezzo, poi ovvio anche qui dovrebbe comunque essere non presente nei dizionari.
    Ci sono molte routine in giro che permettono di generare password a caratteri casuali, io ne uso una mia molto semplice ma comunque valida.
    Codice PHP:
    /** *    Genera un numero unico da usarsi per password e salt. 
    *     $length = numero di caratteri da usarsi in uscita.
    */
    function makeUnique $length=16 ) {   
    $salt       'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $len        strlen$salt );
    $makepass   '';   
    mt_srand10000000 * (double)microtime() );   
    for ( 
    $i 0$i $length$i++ ) {
           
    $makepass .= $salt[mt_rand0$len )];   
    }
    return 
    $makepass;
    }    
    //    makeUnique() 
    Ovviamente l'utente poi la cambia in Panariello style
    Quello che faccio in realtà è sempre inviare la password in formato hash e in particolare uso sha512 per fare questo uso ( http://pajhome.org.uk/crypt/md5/ ) un file che trovo su quel sito e che è sha512.js ( ce ne sono altri, anche in md5 ) ho scelto di usare sha512 perché... non lo so mi piaceva
    Dopo tutto come dicevo prima, usare un hash più semplice non ha senso quindi preferisco giocare duro.
    Quindi nel database in realtà non metto l'hash della password ma l'hash dell'hash della password più il salt e quindi faccio una cosa del tipo:
    Codice PHP:
    $salt =hash'sha512'makeUnique64 ));
    $password hash'sha512'$_POST['pass'] . $salt ); 
    Dove $_POST['pass'] contiene già l'hash a sha512 proveniente dal form di login.

    Parlando di iscrizione, ovviamente dopo aver generata una password casuale da inviare all'email dell'iscritto, faccio quel lavoro, solo che prima di fare $salt e $password, cioè al posto di $_POST['pass'] se $pass = makeUnique( 10 ); ( password in chiaro da inviare via email ) poi $hashPass = hash( 'sha512', $pass );ovvero:
    Codice PHP:
    $pass makeUnique10 );
    $hashPass hash'sha512'$pass );
    $salt =hash'sha512'makeUnique64 ));
    $password hash'sha512'$hashPass $salt ); 
    Complicato? Giusto un filino
    Ma nemmeno tanto se segui la logica scopri che è semplice.
    Ultima modifica di Marcolino's; 18-03-2016 a 15:40

  6. #6
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,574
    Per evitare le registrazioni automatiche puoi fare due cose:
    1. leggere tutte le email che ti arrivano e cercare di capire se chi ti ha scritto è una macchina o un essere umano. Benvenuto Touring!
    2. Usare un CAPTCHA.

    Ovvio la prima non è fattibile e nemmeno tanto sicura oramai, per la seconda al solito trovi decine di script più o meno validi.
    Adesso va di moda la scelta di tre immagini pertinenti per argomento fra nove.
    Valido e nemmeno tanto complicato da implementare, o no?
    Io me ne sono fatto uno testuale, nel senso che è proprio di testo con semplici domande del tipo: "se hai una dozzina di uova, quante uova hai?", oppure: "miao a quale animale si riferisce?".
    Sono domande semplici a risposta unica, dubito che una macchina le possa risolvere, l'unico problema è se tenta di usare un database; ma se controlli i dati di provenienza della macchina e se note che in un'unità di tempo abbastanza ravvicinata è sempre la stessa, puoi bloccarla dopo che so due o tre, quattro tentativi errati.
    Sempre che la macchina capisca cosa ha di fronte

  7. #7
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127
    Quote Originariamente inviata da Marcolino's Visualizza il messaggio
    Ovviamente l'utente poi la cambia in Panariello style
    Tanto vale fargli scegliere già la password che preferisce in fase di iscrizione, o no?

    Quote Originariamente inviata da Marcolino's Visualizza il messaggio
    Complicato? Giusto un filino
    Ma nemmeno tanto se segui la logica scopri che è semplice.
    Tutto ok, capito alla perfezione!

  8. #8
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127
    Quote Originariamente inviata da Marcolino's Visualizza il messaggio
    Per evitare le registrazioni automatiche puoi fare due cose:
    1. leggere tutte le email che ti arrivano e cercare di capire se chi ti ha scritto è una macchina o un essere umano. Benvenuto Touring!
    2. Usare un CAPTCHA.
    Dato che inserire una qualsiasi cosa che faccia perdere più tempo all'utente del previsto non mi piace molto, avevo pensato di fare così:
    L'utente si registra, gli viene inviata un'email con un link da cliccare per attivare l'account.
    Se lo clicca entro 48 ore si attiva, altrimenti, dopo 48 ore il database elimina i dati caricati provvisoriamente dell'utente.
    In questo modo:
    - non ricevo nessuna email di iscritto se non prima clicca su verifica
    - il database si ripulisce da solo
    - evito di far perdere tempo all'utente
    - rendo l'iscrizione più semplice possibile

    Può essere valida una soluzione del genere?


    Quote Originariamente inviata da Marcolino's Visualizza il messaggio
    ma se controlli i dati di provenienza della macchina e se note che in un'unità di tempo abbastanza ravvicinata è sempre la stessa, puoi bloccarla dopo che so due o tre, quattro tentativi errati.
    Sempre che la macchina capisca cosa ha di fronte
    A questo avevo già pensato, brute-force.
    Ultima modifica di andreto; 18-03-2016 a 20:11

  9. #9
    Per quanto riguarda le password vi consiglio di guardare bene la funzione crypt()

    http://php.net/manual/en/function.crypt.php
    Questa volta, più che un voto.. è favoreggiamento.

  10. #10
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127
    Qualcuno riesce a rispondermi alla domanda sui captcha del post n.8?

    Alla fin dei conti mi sembra che i computer / bot utilizzino email false, di solito sono email lunghissime senza senso.

    In questo modo loro non riceveranno l'email per la conferma e io attraverso il cron-tab elimino l'account non verificato dopo 48 ore dalla registrazione.

    Può essere valida una tecnica del genere o potrebbe essere raggirata?

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 © 2021 vBulletin Solutions, Inc. All rights reserved.