Hardware Upgrade Forum

Hardware Upgrade Forum (https://www.hwupgrade.it/forum/index.php)
-   Programmazione (https://www.hwupgrade.it/forum/forumdisplay.php?f=38)
-   -   Parere su sicurezza login su webapp PHP (https://www.hwupgrade.it/forum/showthread.php?t=2940349)


Legolas84 11-05-2021 11:17

Parere su sicurezza login su webapp PHP
 
Ciao, ho scritto una webapp in PHP che si appoggia ad un database mysql con PHPmyAdmin.

La web App richiede un Login e volevo un parere sulla robustezza della sicurezza del mio sistema ed eventualmente un consiglio per migliorarla nel caso fosse insufficiente.

Allora, per prima cosa l'Admin crea gli utenti e gli conferisce un livello utente (admin, superuser, user).
Sul database vengono salvati i dati utente compreso il livello e la password codificata con Argon2ID.

A questo punto l'utente può fare il login, il sistema di login confronta username e password con quanto salvato sul database e se corrisponde istanzia diverse variabili di sessione che riguardano l'utente, tra cui nome utente, e il suo livello. Tutte le pagine successive della webapp hanno in testa un controllo che verifica se esistono alcune di queste variabili che vengono istanziate solo in caso di login positivo. Se esistono e si tratta di una pagina che ha un livello di accesso elevato, il sistema controlla anche che la variabile di sessione "livello" dell'utente sia adeguata.

Se tutti i controlli vanno a buon fine il sistema genera la pagina. Se anche solo uno va male (mancano delle var di sessione o il livello non è adeguato), lo script reinvia l'utente all'index.php

Bene.... a che rischi mi espongo? Eventualmente come lo posso migliorare?

Grazie!

WarDuck 14-05-2021 10:00

Ciao, premetto che non sono esperto di PHP, ma così ad occhio non hai specificato se usi un sale e come lo generi per fare l'hash della password.

Il mio consiglio ovviamente è quello di generare un sale random (qui bisogna vedere se PHP ti consente di farlo in maniera robusta) per ogni utente, quando l'Admin aggiunge l'utente al DB (o l'utente re-imposta la password).

Insieme a nome utente e password quindi va memorizzato nel DB anche il sale in chiaro, che userai ogni qual volta devi calcolare l'hash per il determinato utente.

In questo modo ti proteggi da attacchi a dizionario, nella sciagurata ipotesi che il DB venisse compromesso. Questo riduce anche la possibilità che due utenti con la stessa password abbiano associato lo stesso hash.

Detto questo, credo che la parte più sensibile sia la sessione, che non ricordo sinceramente come viene gestita in PHP.

Ti rimando a: https://www.php.net/manual/en/featur...management.php

Probabilmente vuoi avere un unica variabile, ID di sessione, con cui identificare univocamente la sessione dell'utente.

Edit: segnalo anche questi link ->

http://phpsecurity.org/

https://en.wikipedia.org/wiki/Session_fixation

Kaya 14-05-2021 10:06

Sicuramente che tutto il traffico viaggi sotto HTTPS.
Poi se fai anche un controllo con il campo referrer che provenga sempre dal tuo dominio... penso che così non ci sia altro.
Ultima cosa è verificare che non ci sia qualche vulnerabilità di tipo sql injection o xss script.
Magari anche un captcha in home page per evitare i brute force?

Infine parli di phpmyadmin: ecco che questo non sia accessibile dall'esterno sarebbe un ottima cosa.
Detto questo non mi viene in mente altro..


Tutti gli orari sono GMT +1. Ora sono le: 04:44.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Hardware Upgrade S.r.l.