Quanto è intelligente la memorizzazione di password e nomi utente nei file?

0

Quindi, volevo creare un sistema di login con PHP, e in pratica quello che sarebbe stato sarebbe avere un file per i nomi utente e un file per le password, così quando un utente prova ad accedere, riceve solo le informazioni da entrambi i file e corrisponde alle password.

Tuttavia, il lato sicurezza di me sta dicendo che è un'idea assolutamente orribile. Esiste un modo sicuro in cui potrei davvero farcela? Se avesse a che fare con la crittografia delle password, come potrei farlo in modo sicuro?

    
posta Joshua Sparkel 18.03.2018 - 14:31
fonte

3 risposte

2

Le applicazioni più PHP eseguono l'accesso interrogando un database per convalidare le credenziali fornite dall'utente. I database hanno molti vantaggi rispetto ai file di testo semplice . Anche se il grosso problema qui non è solo la sicurezza del database stesso (ovviamente è meglio usare una password complessa per accedere al database) ma la sicurezza dell'applicazione in generale.

Ciò significa che se preferisci / insisti a usare PHP per validazione / registrazione utente ecc ... segui le buone e testate pratiche piuttosto che reinventare la ruota, non solo per validazione ma per ogni parte dell'applicazione (dal momento che un bug apparentemente minore può portare a un completo compromesso dell'applicazione e al leakage del database). Ora, come è noto, nessun sistema è sicuro al 100%, quindi anche se si verifica una violazione della sicurezza per qualche motivo non si desidera che tutte queste credenziali dell'utente vengano divulgate in pubblico. Quindi il modo migliore per evitarlo è salvare l'hash ( scegliere una funzione hash crittograficamente strong come bcrypt etc ... ) di quei crediti piuttosto che salvarli in testo semplice.

Infine, è importante ricordare che esistono strutture web ( come Django , Ruby on Rails etc ... ) che dal design offre molte funzionalità di sicurezza fuori dalla scatola ( secondo me PHP manca in questa parte ) mentre in PHP devi codificare "attentamente" e seguire le buone pratiche.

    
risposta data 18.03.2018 - 22:46
fonte
1

Se vuoi farlo nonostante i consigli contrari che hai già ricevuto, il modo standard per procedere sarebbe quello di impostare nomi utente e password come variabili in file PHP dedicati. Quando un utente tenta di recuperare i file, quest'ultimo viene eseguito come PHP senza visualizzare nulla.

Se stai pensando di memorizzare le password per convalidare gli accessi, ti consigliamo di archiviare gli hash salati.

    
risposta data 18.03.2018 - 16:39
fonte
1

Innanzitutto, non importa dove li memorizzi, devi assicurarti di hash corretto li . Questa è la priorità numero uno. E nota che hash , non encrypt . Sì, c'è differenza. Una grande differenza.

Per quanto riguarda dove archiviarli, l'ovvia scelta tradizionale sarebbe un database. Confrontiamo la memorizzazione delle password in un database per memorizzarle in un file. Entrambe le scelte hanno una serie di semplici errori che possono esporre i dati.

Per i database, è necessario assicurarsi di proteggere dall'iniezione SQL e rafforzare il server del database (non esporlo a Internet, utilizzare credenziali forti, ecc.).

Per i sistemi basati su file, esiste un gruppo separato di problemi:

  • Metti il file fuori da webroot.
  • Devi essere assolutamente sicuro che non ci siano vulnerabilità di inclusione locale dei file sul tuo server.
  • Assicurati che il file non finisca nei backup, nei repository git, ecc.

Direi che è molto più facile farlo correttamente con un database, poiché hai una separazione più chiara tra codice e dati. Ma ciò che conta alla fine qui è l'implementazione. Una libreria di database homebrew scritta male con SQLi è peggio di una struttura consolidata e collaudata per i file.

Tuttavia, mi aspetto che sia più difficile farlo correttamente con i file che con un database. E per essere onesti, ottenere un sistema di accesso proprio in PHP è estremamente difficile da iniziare con . Perdona il mio pessimismo, ma la maggior parte delle persone che si sono impegnate a farlo falliscono e finiscono con sistemi insicuri. Forse dovresti esaminare i quadri esistenti? Ciò ridurrebbe notevolmente il rischio.

(Ovviamente, i database hanno alcuni vantaggi tecnici piuttosto importanti non legati alla sicurezza, ma qui lo escludo dai discus.)

    
risposta data 19.03.2018 - 11:20
fonte

Leggi altre domande sui tag