Ciao a tutti

Ho costruito un pannello di amministrazione per il sito della mia azienda, capace di permettere l'inserimento dei clienti che serviamo e mostrarli nelle pagine accessibili a tutti relative alla regione dove la persona cerca un nostro rivenditore.
Premetto che ho rispettato passo passo la guida sulla sicurezza in php , per cui le pass sono sotto firma, tutti i paramentri che vengono ricevuti dalle pagine in php vengono puliti da tag e caratteri speciali, eseguo controlli sul referer , se potessi passerei tutto sotto https, tutte le stringhe che vengono processate vengono pulite anch'esse ecc.

es: la persona nella pagina shop.php seleziona come regione veneto -> il nome della regione viene utilizzato per una query sul db per trovare i clienti del veneto

la tabella dei clienti sul db li identifica univocamente grazie ad un id numerico es:

id:125
ragione socialerova
indirizzorova indirizzo,1
userservizi:esmpio
passservizi:iasdldjlkdas87386383ndn //questa è la firma della password per i servizi offerti a quel cliente

adesso oltre che a mostrare semplicemente i negozi voglio offrire a i miei rivenditori alcuni servizi dedicati, come ad esempio una pagina personale sul mio sito .

pensavo dopo un login che controlla user,password,che servizi ha attivi, (ad esempio il cliente ha attivo il servizio minisito ) di creare una variabile in sessione es : minisito="minisitoattivo" poi naturalmente nella pagina di gestione del minisito, se la variabile esiste lui può entrare.

il problema nasce dal fatto che voglio che lui possa entrare e però naturalmente modificare le informazioni (immagini testi ) relative solo al suo id, questo id deve per forza essere passato, ma può comunque da una persona abbastanza abile essere modificato, nonostante contolli sul referer o altro.


alla fine ho pensato di generare una chiave (es casuale esadecimale di 16caratteri) associata all'id ogni volta che il cliente si logga

1)durante il login genero una chiave e la salvo in una tabella nel db assieme all'id
2) ogni volta che le mie pagine richiedono l'id ( esempio per capire quali testi posso modificare ) richiedono anche la chiave e controllano che sia quella giusta.

se l'associazione tra id e chiave fallisce vengo buttato fuori.

teoricamente così all'utente malintenzionato non basta modificare il valore del suo id per accedere ad informazioni di qualcun'altro, ma dovrebbe azzeccare l'associazione tra id e chiave casuale di 16 caratteri esadecimale.


Sto procedendo nella maniera esatta? Mi son perso cose fondamentali ? Sbaglio? LOL meglio chiedere prima a gente più esperta ho pensato. ( Sono ancora in fase di progettazione per quanto riguarda i servizi attivi quindi volendo posso ancora modificare tutto )
GRAZIE MILLE in anticipo per i consigli