[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.343
91
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.343
91
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.343
91
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.343
91
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 Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0

Discussioni simili