Perché usare i modelli?
Perché usare un sistema di template in PHP?
Perché usare un sistema di template in PHP quando PHP stesso è un linguaggio di template?
Ripercorriamo brevemente la storia di questo linguaggio, che è ricca di colpi di scena interessanti. Uno dei primi linguaggi di programmazione utilizzati per la generazione di pagine HTML è stato il linguaggio C. Tuttavia, ben presto ci si è resi conto che l'utilizzo di questo linguaggio per la generazione di pagine HTML non era sufficiente. Tuttavia, divenne presto evidente che utilizzarlo per questo scopo era poco pratico. Rasmus Lerdorf creò quindi PHP, che facilitava la generazione di HTML dinamico con il linguaggio C sul retro. Originariamente PHP era stato progettato come linguaggio di template, ma col tempo ha acquisito ulteriori funzionalità ed è diventato un linguaggio di programmazione a tutti gli effetti.
Tuttavia, funziona ancora come un linguaggio di template. Un file PHP può contenere una pagina HTML, in cui le variabili
vengono emesse con i caratteri <?= $foo ?>
, ecc.
All'inizio della storia di PHP, è stato creato il sistema di template Smarty, con lo scopo di separare rigorosamente l'aspetto (HTML/CSS) dalla logica dell'applicazione. Il sistema forniva deliberatamente un linguaggio più limitato rispetto a PHP stesso, in modo che, ad esempio, uno sviluppatore non potesse fare una query al database da un template, ecc. D'altra parte, rappresentava una dipendenza aggiuntiva nei progetti, ne aumentava la complessità e richiedeva ai programmatori di imparare un nuovo linguaggio Smarty. Questi vantaggi sono stati controversi e per i template si è continuato a usare il semplice PHP.
Col tempo, i sistemi di template hanno iniziato a diventare utili. Hanno introdotto concetti come l'ereditarietà, la modalità sandbox e una serie di altre caratteristiche che hanno semplificato notevolmente la creazione di template rispetto al PHP puro. Il tema della sicurezza, l'esistenza di vulnerabilità come gli XSS e la necessità dell'escape sono venuti alla ribalta. I sistemi di template hanno introdotto l'escape automatico per eliminare il rischio che un programmatore lo dimenticasse e creasse una grave falla nella sicurezza (vedremo tra poco che questo comporta alcune insidie).
Oggi i vantaggi dei sistemi di template superano di gran lunga i costi associati alla loro implementazione. Pertanto, ha senso utilizzarli.
Perché Latte è meglio di Twig o Blade?
Ci sono diversi motivi: alcuni sono piacevoli e altri sono immensamente utili. Latte è una combinazione di piacevole e utile.
*Latte ha la stessa sintassi di PHP. L'unica differenza è nella notazione
dei tag, preferendo i più brevi {
e }
invece di <?=
e ?>
. Ciò
significa che non è necessario imparare un nuovo linguaggio. I costi di formazione sono minimi. Soprattutto, durante lo
sviluppo, non è necessario „passare“ continuamente dal linguaggio PHP a quello dei template, perché sono entrambi uguali.
A differenza dei template di Twig, che utilizzano il linguaggio Python, costringendo il programmatore a passare da un linguaggio
all'altro.
*Tutti i sistemi di template, come Twig, Blade o Smarty, si sono evoluti per includere una protezione contro gli XSS sotto
forma di escape automatico. Più precisamente, la chiamata automatica della funzione
htmlspecialchars()
. Tuttavia, i creatori di Latte si sono resi conto che questa non è affatto la soluzione giusta.
Infatti, parti diverse del documento richiedono metodi di escape diversi. L'escape automatico ingenuo è una funzione pericolosa
perché crea un falso senso di sicurezza.
Affinché l'auto-escaping sia funzionale e affidabile, deve riconoscere in quale punto del documento vengono emessi i dati (che chiamiamo contesti) e scegliere la funzione di escape di conseguenza. Pertanto, deve essere sensibile al contesto. E questo è ciò che Latte può fare. Capisce l'HTML. Non percepisce il modello come una semplice stringa di caratteri, ma capisce cosa sono i tag, gli attributi e così via. Pertanto, esegue l'escape in modo diverso nel testo HTML, all'interno dei tag HTML, all'interno di JavaScript, ecc.
Latte è il primo e unico sistema di template PHP con escape sensibile al contesto. Rappresenta l'unico sistema di template veramente sicuro.
E un'altra ragione piacevole: Poiché Latte comprende l'HTML, offre altre caratteristiche molto piacevoli. Ad esempio, n:attributi. O la possibilità di controllare i link. E molte altre ancora.
Che cos'è l'escape?
L'escape è un processo che consiste nel sostituire i caratteri con un significato speciale con sequenze corrispondenti quando
si inserisce una stringa in un'altra per evitare effetti indesiderati o errori. Ad esempio, quando si inserisce una stringa in un
testo HTML, in cui il carattere <
ha un significato speciale perché indica l'inizio di un tag, lo si sostituisce
con la sequenza corrispondente, che è l'entità HTML <
. Questo permette al browser di visualizzare
correttamente il simbolo <
.
Un semplice esempio di escape diretto nella scrittura del codice PHP è l'inserimento di una virgoletta in una stringa, anteponendo un backslash.
L'escape è trattato in modo più dettagliato nel capitolo Come difendersi dagli XSS.
È possibile eseguire una query al database da un template Latte?
Nei modelli è possibile lavorare con gli oggetti che il programmatore passa loro. Se il programmatore vuole, può passare un oggetto del database al modello ed eseguire una query. Se intende farlo, non c'è motivo di impedirglielo.
Una situazione diversa si presenta se si vuole dare ai clienti o ai programmatori esterni la possibilità di modificare i template. In questo caso, non si vuole assolutamente che abbiano accesso al database. Naturalmente, non si passerà l'oggetto database al template, ma cosa succede se si può accedere al database attraverso un altro oggetto? La soluzione è la modalità sandbox, che consente di definire quali metodi possono essere chiamati nei template. In questo modo, non ci si deve preoccupare di violazioni della sicurezza.
Quali sono le principali differenze tra i sistemi di template come Latte, Twig e Blade?
Le differenze tra i sistemi di template come Latte, Twig e Blade risiedono principalmente nella sintassi, nella sicurezza e nell'integrazione con i framework:
- Latte: utilizza la sintassi del linguaggio PHP, che lo rende più facile da imparare e da usare. Offre una protezione di alto livello contro gli attacchi XSS.
- Twig: utilizza una sintassi simile a quella di Python, molto diversa da quella di PHP. Esegue l'escape senza distinzione di contesto. È ben integrato con il framework Symfony.
- Blade: utilizza un mix di sintassi PHP e personalizzata. Esegue l'escape senza distinzione di contesto. È strettamente integrato con le funzionalità e l'ecosistema Laravel.
Vale la pena per le aziende utilizzare un sistema di template?
Innanzitutto, i costi associati alla formazione, all'utilizzo e ai vantaggi complessivi variano notevolmente a seconda del sistema. Il sistema di template Latte, grazie all'uso della sintassi PHP, semplifica notevolmente l'apprendimento per i programmatori che hanno già familiarità con questo linguaggio. Di solito bastano poche ore perché un programmatore prenda confidenza con Latte, riducendo i costi di formazione e accelerando l'adozione della tecnologia e, soprattutto, l'efficienza nell'uso quotidiano.
Inoltre, Latte offre un alto livello di protezione contro le vulnerabilità XSS grazie alla sua esclusiva tecnologia di escape context-aware. Questa protezione è fondamentale per garantire la sicurezza delle applicazioni web e ridurre al minimo il rischio di attacchi che potrebbero mettere in pericolo gli utenti o i dati aziendali. La sicurezza delle applicazioni web è importante anche per mantenere la buona reputazione di un'azienda. I problemi di sicurezza possono portare alla perdita di fiducia da parte dei clienti e danneggiare la reputazione dell'azienda sul mercato.
L'uso di Latte riduce anche i costi complessivi di sviluppo e di manutenzione, rendendo entrambi più semplici. Pertanto, l'uso di un sistema di template vale sicuramente la pena.
Latte influisce sulle prestazioni delle applicazioni web?
Anche se i modelli di Latte vengono elaborati rapidamente, questo aspetto non ha molta importanza. Il motivo è che il parsing dei file avviene solo una volta durante la prima visualizzazione. Vengono poi compilati in codice PHP, memorizzati su disco ed eseguiti a ogni richiesta successiva senza bisogno di ricompilazione.
Questo è il modo in cui funziona in un ambiente di produzione. Durante lo sviluppo, i modelli Latte vengono ricompilati ogni volta che il loro contenuto viene modificato, in modo che lo sviluppatore veda sempre la versione corrente.