[PHP] Un dettaglio di logica e approccio sulla sicurezza di un progetto.

w_t

Utente Attivo
3 Set 2007
121
0
16
Salve,
su un progetto Web-App dove gestisco dati sensibili, ho sviluppato il Back Office in php con programmazione ad oggetti.

Nelle pagine del Back Office, includo le classi, le dichiaro e ne utilizzo i loro metodi, come viene fatto in molte occasioni.

Mi è stato consigliato di creare delle API REST per gestire tutti i dati in "Inserimento, Modifica, Eliminazione, Interrogazione", e gestirle con delle chiamate dal Back Office, questo per aumentare oltre alla flessibilità di un utilizzo da parte di altre applicazioni, anche per la sicurezza!!

La domanda è la seguente:

Dato che il mio back office, le classi, il database, si trova tutto all'interno di un Cloud nel solito dominio, facendo delle richieste REST invece che delle chiamate dirette alle classi, perchè dovrebbe aumentare la sicurezza??

Io vedo questa pratica come un Diminuire la sicurezza!! Sbaglio?

Se nelle API applico una sicurezza alta tipo: Criptatura, protocollo sicuro, e tutto quello che posso mettere, non è mai come la protezione che posso avere dal server stesso.

Se sono all'interno del server, perchè uscire con una chiamata https e poi rientrare nel solito punto da dove è partita la chiamata??

Sto sbagliando?

Grazie a tutti
 

macus_adi

Utente Attivo
5 Dic 2017
1.077
61
48
IT/SW
Se nelle API applico una sicurezza alta tipo: Criptatura, protocollo sicuro, e tutto quello che posso mettere, non è mai come la protezione che posso avere dal server stesso.
In questo scenario se ti prendo la macchina ho anche i dati sensibili.... !

Solitamente si separa il frontend dal backend, non inteso come applicazione ma proprio come macchina esterna....
Praticamente per sicurezza dovresti proprio evitare di mettere core + db sulla stessa macchina....
Quindi avresti bisogno di 2 oggetti differente:
1->macchina FrontEnd -> si connette al DB? NO! chiama il BK? NO, usa un servizio, lo consuma e va avanti!
2-> macchina BackEnd -> si connette al DB? SI! Accetta connession dirette? NO, utilizza i servizi e risponde con un obj adatto!

Quando ti connetti al db per le query effettivamente non fai altro che interrogare la macchina bk attraverso REST per quella macchina che dovrebbe per ovvi motivi essere isolata rispetto al frontend..... Detto questo dovresti implementare il tutto a servizi e non con semplici classi che a dir poco sarebbero inappropriate per problemi inerenti alle compliance più restrittive di alcune aziende...

Altra nota, non ti conviene criptare i dati solo sul DB, il flusso sarebbe sempre in chiaro tra DB e applicazione...

Spero sia chiaro il concetto.
 

w_t

Utente Attivo
3 Set 2007
121
0
16
In questo scenario se ti prendo la macchina ho anche i dati sensibili.... !

Solitamente si separa il frontend dal backend, non inteso come applicazione ma proprio come macchina esterna....
Praticamente per sicurezza dovresti proprio evitare di mettere core + db sulla stessa macchina....
Quindi avresti bisogno di 2 oggetti differente:
1->macchina FrontEnd -> si connette al DB? NO! chiama il BK? NO, usa un servizio, lo consuma e va avanti!
2-> macchina BackEnd -> si connette al DB? SI! Accetta connession dirette? NO, utilizza i servizi e risponde con un obj adatto!

Quando ti connetti al db per le query effettivamente non fai altro che interrogare la macchina bk attraverso REST per quella macchina che dovrebbe per ovvi motivi essere isolata rispetto al frontend..... Detto questo dovresti implementare il tutto a servizi e non con semplici classi che a dir poco sarebbero inappropriate per problemi inerenti alle compliance più restrittive di alcune aziende...

Altra nota, non ti conviene criptare i dati solo sul DB, il flusso sarebbe sempre in chiaro tra DB e applicazione...

Spero sia chiaro il concetto.
Ti ringrazio mi hai dato un dettaglio molto completo.

Non capisco il motivo delle Classi, ho 15 Classi differenti nel progetto con decine di metodi ciascuna.

Questi metodi li utilizzo molte volte nel progetto, tu dici che per ogni metodo devo fare un servizio API che restituisce il json ??

Tu hai detto "1->macchina FrontEnd -> chiama il BK? NO", cosa intendi per "FrontEnd", per "BackEnd" e per "BK"??

Io sto parlando di un interfaccia utente in html+php (BackEnd), dove ha un accesso per l'amministratore e basta, nella quale si eseguono operazioni nel Database, il "FrontEnd" non so cosa intendi...

Posso capire che per "FrontEnd" intendi l'interfaccia html+php, ma se è cosi non capisco più cosa è il "BackEnd".

Io ho 3 elementi:
1) "pagine html+php" per l'interfaccia utente (Amministratore)
2) "files.php" con cui ho sviluppato le classi
3) "DB MySQL" dove ci sono i dati sensibili

Scusami se sono stressante e pignolo ma vorrei imparare bene come gestire la sicurezza.
 

macus_adi

Utente Attivo
5 Dic 2017
1.077
61
48
IT/SW
Scusa elimina BK è BE e FE ossia Backend e Frontend.... Chiedo venia errore di battitura..

Macchina di Backend BE ossia dove gira il DB e la logica rest.
Macchina di Frontend FE ossia dove gira la logica client.

La macchina FE non può chiamare il DB della macchina backend, quindi devi utilizzare dei servizi.....

Posso capire che per "FrontEnd" intendi l'interfaccia html+php, ma se è cosi non capisco più cosa è il "BackEnd".
La macchina di beckend non deve avere interfacce utente, devo gestire le operazioni elementari sul DB, in questo caso ti metti in un trix che non ha fine....
 

w_t

Utente Attivo
3 Set 2007
121
0
16
Scusa elimina BK è BE e FE ossia Backend e Frontend.... Chiedo venia errore di battitura..

Macchina di Backend BE ossia dove gira il DB e la logica rest.
Macchina di Frontend FE ossia dove gira la logica client.

La macchina FE non può chiamare il DB della macchina backend, quindi devi utilizzare dei servizi.....


La macchina di beckend non deve avere interfacce utente, devo gestire le operazioni elementari sul DB...
OK, ora mi è chiaro.

Tu sopra hai detto: "Detto questo dovresti implementare il tutto a servizi e non con semplici classi che a dir poco sarebbero inappropriate per problemi inerenti alle compliance più restrittive di alcune aziende..."

- Quali problemi causano le Classi??
- Quindi per ogni metodo di classe devo fare un servizio rest??
 

macus_adi

Utente Attivo
5 Dic 2017
1.077
61
48
IT/SW
Inteso come "utilizza il pattern MVC per effettuare chiamate esterne", e non classi buttate li così!
Non causano problemi le classi, ogni servizio non deve avere un metodo.... Comprendo che forse ho espresso male il concetto....
Allora....
Il servizio lasciamolo stare per un pò....
Le tue classi devono prevedere solo ed esclusivamente l'utilizzo di modello dati passati dal servizio, e non creare Classi con metodi volanti... Mi spiego... Se devi strutturare l'applicazione in modo sicuro e soprattutto la stesura del codice deve rispettare le regole della buona programmazione stai sbagliando!
 

w_t

Utente Attivo
3 Set 2007
121
0
16
Inteso come "utilizza il pattern MVC per effettuare chiamate esterne", e non classi buttate li così!
Non causano problemi le classi, ogni servizio non deve avere un metodo.... Comprendo che forse ho espresso male il concetto....
Allora....
Il servizio lasciamolo stare per un pò....
Le tue classi devono prevedere solo ed esclusivamente l'utilizzo di modello dati passati dal servizio, e non creare Classi con metodi volanti... Mi spiego... Se devi strutturare l'applicazione in modo sicuro e soprattutto la stesura del codice deve rispettare le regole della buona programmazione stai sbagliando!
Scusami, se ti stò stressando non rispondermi, ma devo farti un altra domanda:

I metodi delle classi che ho sviluppato, servono per Inserire, Modificare, Eliminare, Leggere, dati dal Database, fare controlli nei risultati e poco più.

Comunque esistono manuali o tutorial dove potere imparare queste norme/linee guida della corretta programmazione?
 

macus_adi

Utente Attivo
5 Dic 2017
1.077
61
48
IT/SW
I metodi delle classi che ho sviluppato, servono per Inserire, Modificare, Eliminare, Leggere, dati dal Database, fare controlli nei risultati e poco più.
Questa parta è sbagliata.... Non puoi utilizzare quelle classi per recuperare dall'app al backend i dati.... É qui l'errore...
Quelle classi buttale vie... utilizza dei modelli dati e restituisci gli oggetti che ti interessano....
Qui trovi slim framework
Qui trovi una libreria / microframework per le connessioni al DB
Qui una guida su come creare un'app MVC
 

w_t

Utente Attivo
3 Set 2007
121
0
16
Questa parta è sbagliata.... Non puoi utilizzare quelle classi per recuperare dall'app al backend i dati.... É qui l'errore...
Quelle classi buttale vie... utilizza dei modelli dati e restituisci gli oggetti che ti interessano....
Qui trovi slim framework
Qui trovi una libreria / microframework per le connessioni al DB
Qui una guida su come creare un'app MVC
No, non ho sviluppato questo che stai dicendo,
premesso che abbiamo già detto di separare il BackEnd dal FrontEnd, quando farò questa modifica, le classi le utilizzerò cosi:

Il FrontEnd dal "server-1" tramite delle chiamate tipo cURL, interroga il "server-2" dove ci sono i servizi rest.
I servizi rest nel "server-2" per eseguire il compito per cui sono stati sviluppati, utilizzano le Classi per accedere al database e fare le operazioni dovute, es:

Voglio il dettaglio completo di un utente:

Dal FrontEnd nel server-1, invio una chiamata cURL contenente id_user, arriva al server-2, viene presa in carico dal servizio preposto, il servizio tramite il metodo GetUserData della classe User, raccoglie tutti i dati dell'utente, il quale servizio converte l'array o matrice in una stringa json lo cripta e lo da come risposta alla chiamata cURL del server-1.

Sbaglio? Io ho sempre fatto cosi.

Ti ringrazio per i link, me li studierò bene.