+ Rispondi alla Discussione
Risultati da 1 a 10 di 10

Quale è il modo più sicuro di impostare un CMS per un sito in PHP MySQL e jQuery

Ultimo Messaggio di areFranz il:
  1. #1
    User Newbie
    Data Registrazione
    Dec 2018
    Località
    Bergamo
    Messaggi
    8

    Quale è il modo più sicuro di impostare un CMS per un sito in PHP MySQL e jQuery

    Salve a tutti!
    Sto creando un sito di fotografie dotato di CMS per caricare le foto e gestire gli utenti (ogni foto può essere commentata solo se sei un utente registrato) e mi trovo di fronte a un problema:

    quale è il modo migliore di proteggere le pagine del CMS e alcune sezioni del sito in modo da renderle visibili SOLO all'amministratore del sito e non a tutti gli utenti?

    Ho cercato molto "login sicuro in php" in google ma ogni tutorial propone un metodo diverso (ed es, usare cookies o variabili di sessione, o addirittura usare un .txt per conservar username e password degli iscritti... boh).

    Il punto è che il login al sito è una pagina unica con il suo jQuery e PHP script in $.post(); e non mi piace l'idea di mettere nel php script una

    if ($row['user'] == 'admin') { $_SESSION['user'] = 'admin'; }

    e richiamare nelle pagine una

    if ($_SESSION['user'] == 'admin') { ..mostra contenuto...}

    Che alternative ho?

    Ringrazio in anticipo,

    Francesco

  2. #2
    Utente Premium
    Data Registrazione
    Nov 2018
    Località
    Ragusa
    Messaggi
    227
    Aggiungi flaviors200 su Google+ Aggiungi flaviors200 su Facebook Aggiungi flaviors200 su Linkedin
    Ciao, ti do alcune best practice

    1) Utilizza HTTPS, niente pagine su HTTP!
    2) Salva le password utente in un database, mai in un file di testo!
    3) Non salvare le password utente in chiaro nel DB, piuttosto salva gli hash con una funzione di hashing sicura (Es. bcrypt o Argon2, in PHP c'è password_hash() per generare un hash).
    3) Per ogni pagina protetta, in cui avrai session_start(), fai un check su una variabile di sessione inizializzata durante il login utente, aggiungi un controllo anche sull'IP utente e uno sul browser (sempre salvati al momento del login in variabili di sessione), infine se consenti all'utente loggato di fare operazioni di scrittura sul database utilizza un token di sessione (previene attacchi di tipo CSRF).

    In materia di sicurezza applicazioni web una delle risorse migliori e più autorevoli è senza dubbio OWASP, ti incollo di seguito il link riguardo l'autenticazione

    owasp.org/index.php/Authentication_Cheat_Sheet
    Sviluppo siti web dinamici e gestionali | Flaviobiscaldi.it

  3. #3
    User Newbie
    Data Registrazione
    Dec 2018
    Località
    Bergamo
    Messaggi
    8
    Grazie flaviors200!
    Appena riesco guardo il link...
    Due domande veloci intanto:
    Come uso HTTPS invece di HTTP?
    Cosa è un token di sessione?

  4. #4
    Utente Premium
    Data Registrazione
    Nov 2018
    Località
    Ragusa
    Messaggi
    227
    Aggiungi flaviors200 su Google+ Aggiungi flaviors200 su Facebook Aggiungi flaviors200 su Linkedin
    Citazione Originariamente Scritto da areFranz Visualizza Messaggio
    Come uso HTTPS invece di HTTP?
    Installa un certificato SSL/TLS

    Citazione Originariamente Scritto da areFranz Visualizza Messaggio
    Cosa è un token di sessione?
    owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet #Token_Based_Mitigation

    Esempio veloce:

    Codice HTML:
    <form action="modifica.php" method="post">
       <input type="hidden" name="token" value="58jfdk3830">
       <input type="text" name="card_number">
       <input type="submit" name="save" value="Salva">
    </form>
    Il token è un valore casuale che inserisci in un campo hidden del tuo modulo, e lo imposti come variabile di sessione (Es. $_SESSION['token'])

    Lato server confronti il valore del campo nascosto con quello salvato nella variabile di sessione, solamente se coincidono la richiesta è valida.

    Codice PHP:
    <?php
       
    if (isset($_POST['save'])) {

          if (
    $_SESSION['token'] != $_POST['token']) {

              echo 
    "Richiesta non valida";

          } else {

              echo 
    "Richiesta valida";
              
    // salva i dati

          
    }
       }
    Il motivo per cui si utilizza è dato dal fatto che io potrei duplicare la tua sessione, ma dato che il token è generato sul server difficilmente io (il client) ne posso conoscere il valore.
    Sviluppo siti web dinamici e gestionali | Flaviobiscaldi.it

  5. #5
    User Newbie
    Data Registrazione
    Dec 2018
    Località
    Bergamo
    Messaggi
    8
    Ok il sito dispone già di un certificato SSL, quindi sono apposto no?
    Mentre ok per il token anche se non mi è chiarissimo, cercherò in google...
    Ma la cosa più importante è:

    è davvero buona pratica inserire un check tipo:

    if ($_SESSION['user'] == 'nome_super_utente') { ... mostra contenuto protetto ... }

    ?

  6. #6
    Utente Premium
    Data Registrazione
    Nov 2018
    Località
    Ragusa
    Messaggi
    227
    Aggiungi flaviors200 su Google+ Aggiungi flaviors200 su Facebook Aggiungi flaviors200 su Linkedin
    La buona pratica sarebbe quella di studiarsi le buone pratiche

    Se il sito dispone di un certificato assicurati almeno di reindirizzare l'utente ad HTTPS. Ti lascio questa risorsa servermanaged.it/blog/certificati-ssl/#I_Certificati_SSL_best_practices_dopo_linstallazi one

    Per quanto riguarda PHP invece ti consiglio questa preziosa risorsa che raccoglie tutte le migliori pratiche da seguire per chi sviluppa in PHP it.phptherightway.com

    Ad ogni modo proteggere un contenuto riservato verificando solamente il valore di una variabile di sessione non è una buona pratica.

    Come ti ho detto dovresti daree un check su ulteriori valori per aumentare la sicurezza, l'IP e il browser utente sono due esempi.

    Avevo già in mente di scrivere un tutorial sul mio blog riguardo il login in PHP, appena trovo un pò di tempo lo faccio e aggiorno questo post.
    Sviluppo siti web dinamici e gestionali | Flaviobiscaldi.it

  7. #7
    User Newbie
    Data Registrazione
    Dec 2018
    Località
    Bergamo
    Messaggi
    8
    Bene, grazie mille della risposta...
    Nella attesa del tuo tutorial, consulterò le guide che mi hai indicato!

  8. #8
    User Newbie
    Data Registrazione
    Dec 2018
    Località
    Bergamo
    Messaggi
    8
    Hei! Alla grande! Ho inserito il file .htaccess et voila! Ora fa refirect su https!
    Mentre sono un po perplesso sulla check di IP e browser:
    dove imposto i loro valori e come ne faccio il check?

  9. #9
    User Newbie
    Data Registrazione
    Dec 2018
    Località
    Bergamo
    Messaggi
    8
    Scusa, ho capito come fare il check su IP e browser.. MA

    stackoverflow.com/questions/15699101/get-the-client-ip-address-using-php

    Quale delle soluzioni posso usare?

  10. #10
    User Newbie
    Data Registrazione
    Dec 2018
    Località
    Bergamo
    Messaggi
    8
    Scusami ancora, non ho capito come assegnare il valore del token e dove farlo...

+ Rispondi alla Discussione

Tag per Questa Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.