Funziona con token e sessioni utente [chiuso]

0

Sto cercando di sviluppare un'app social media e un sito web. Il problema è che sto cercando di trovare un modo sicuro per lavorare con gli accessi e le sessioni poiché altri metodi non sembrano buoni o hanno modi migliori.

Per il sito web, una volta effettuato l'accesso se la password e il nome utente corrispondono dovrei salvare una sessione come cookie o creare qualche tipo di token? Preferirei che non scada perché sarebbe un inconveniente per gli utenti, ma voglio che sia sicuro allo stesso tempo.

Per l'app, quando effettui il login devo salvare anche una sessione e lavorare con quella? O dovrebbe anche avere un token che si rinnova automaticamente? Non voglio che continui a richiedere all'utente di eseguire il login poiché ciò porterebbe le persone lontano.

Sto utilizzando il seguente software e le seguenti lingue:

  • App: Xamarin.Forms (C #)
  • Sito web: PHP
  • Database: MySQL
posta Dan 28.04.2018 - 23:39
fonte

1 risposta

1

PHP ha integrato la gestione delle sessioni che è possibile utilizzare, ad es.

session_start();
<?php
    $_SESSION[] = something;
session_destroy(); <- when you want to end that current session
?>

Per la tua azione modulo: <?php echo($_SERVER[PHP_SELF]);> per mitigare xss

se usi questo metodo, ogni sessione assegnerà una chiave utente sulla macchina degli utenti e quando una sessione viene aperta altrove, cerca quella chiave - se la coincide accederà a quella sessione - se non è così inizia una nuova sessione.

Puoi utilizzare session_destroy() per eliminare tutti i dati di sessione per quell'utente o session_unset(); per destare una sessione particolare.

Se si sta utilizzando un database SQL, è necessario assicurarsi che venga eseguita la convalida, altrimenti si lascerà l'app Web aperta a un numero di attacchi, ad es. XSS, SQLi, ecc. Che possono far trapelare i dati degli utenti, per un'app / sito web di social media che è molto brutto per ovvi motivi. Ad esempio, per un campo di accesso, qualcosa di simile sarebbe sicuro:

<?php
    function clean($string)                    //custom cleaning with regex
    {
        $string = str_replace(' ', '-' $string);
        $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string);
        return preg_replace('/-+/', '-', $string);
    }

    if(isset($_POST('submit')))               // built in sanitising
    {
        $sanitised_name = filter_input(INPUT_POST, 'username', FILTER_SANITISED_ENCODED, FILTER_FLAG_STRIP_HIGH);
    }

    echo $sanitised_name;                    // print out the sanitised name
    echo .clean($_POST['username']).;        // print out using the custom function

   ?>

Sopra mostra due modi diversi per ottenere risultati molto simili con funzioni incorporate. il primo blocco utilizza regex che è possibile limitare a qualsiasi set di caratteri che si desidera utilizzare per gli utenti, mentre il secondo blocco utilizza le funzioni incorporate di PHP, alla fine solo echo, in modo da poter vedere la differenza per qualsiasi input che si utilizza.

EDIT: quando memorizzi i nomi utente e le password degli utenti dovresti memorizzare il nome in chiaro nel tuo database, ma le password dovrebbero essere salate e con hash, quindi piuttosto che verificare se un nome utente e una password coincidono, controlla se un hash di nome utente e password corrispondono hai nel tuo database - ma assicurati di impostare una connessione sicura prima che un utente invii qualcosa - altrimenti inviano informazioni al tuo sito in modo non sicuro - abbastanza facile per qualcuno di MITM e rubare credenziali.

In realtà ho scritto un articolo che si occupa specificamente della protezione di PHP, SQL, cookie e sessioni da attacchi come XSS, SQLi, dirottamenti di sessione ecc. se è utile per te, lascerò un link ad esso sotto poiché va in maggiori dettagli: link Proprio come un disclaimer non lavoro in sicurezza - Io sono uno studente che studia compSec ma spero di lavorare nel settore nei prossimi due anni - se c'è qualcosa che manca o meglio della mia risposta mal felicemente modificarlo per migliorarlo dato che alcune persone qui sono estremamente ben informate!

Buona fortuna con l'app per i social media e il sito Web - è bello vedere che si sta cercando di renderlo sicuro sin dall'inizio!

    
risposta data 29.04.2018 - 11:20
fonte

Leggi altre domande sui tag