[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.320
88
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.320
88
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.320
88
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.320
88
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.
 
Discussioni simili
Autore Titolo Forum Risposte Data
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 2
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
I Eecuzione di javascript in ciclo foreach php. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
A [cerco - retribuito] Sviluppatore Php freelance per progetti vari Offerte e Richieste di Lavoro e/o Collaborazione 2
L Google chart php mysql PHP 2
R Download file multipli da directory php PHP 0
F pagina dinamica PHP PHP 3
P Rimozione automatica url da sitemap.xml con PHP PHP 1
L php tinymce mi duplica la classe label PHP 3
S Errore PHP - Notice: Undefined index ... PHP 14
N file manager da php 5 a 7 PHP 15
M Utilizzare la funzione mysql_num_rows() in PHP 5 PHP 3
elpirata Update dinamico informazioni scritte in una pagina php jQuery 11
N Mysql_result per PHP 7 PHP 2
Emix Select concatenate php sql ajax PHP 2
P Modifica con PHP di un node in una sitemap xml PHP 0
D Come usare funzione php PHP 6
P Cancellazione specifici files in una folder php PHP 1
R Tradurre stringhe con php e google translator PHP 4
I Salvataggio snapshot IPCAM tramite PHP PHP 5
felino PHP e script generazione file excel PHP 2
L Aiuto per programma web php/mySQL PHP 2
A Estrapolare parti di testo con PHP PHP 2
A Aiuto php colore diverso PHP 10
E Errore di lettura php in html PHP 8

Discussioni simili