Perché usare i template?
- Perché dovrei usare un sistema di template in PHP?
- Perché Latte è migliore di Twig o Blade?
- Cos'è l'escaping?
- È possibile eseguire una query al database dal template in Latte?
- Quali sono le principali differenze tra sistemi di template come Latte, Twig e Blade?
- Conviene alle aziende utilizzare un sistema di template?
- Latte influisce sulle prestazioni delle applicazioni web?
Perché dovrei 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 è piena di colpi di scena interessanti. Uno dei primi linguaggi di programmazione utilizzati per generare pagine HTML è stato il linguaggio C. Tuttavia, si è presto rivelato poco pratico per questo scopo. Rasmus Lerdorf ha quindi creato PHP, che ha facilitato la generazione di HTML dinamico con il linguaggio C nel backend. PHP è stato quindi originariamente progettato come linguaggio di template, ma nel tempo ha acquisito ulteriori funzionalità ed è diventato un linguaggio di programmazione completo.
Tuttavia, funziona ancora anche come linguaggio di template. In un file PHP può essere scritta una pagina HTML, in cui le
variabili vengono visualizzate usando <?= $foo ?>
, ecc.
Già agli albori della storia di PHP è nato il sistema di template Smarty, il cui scopo era separare rigorosamente l'aspetto (HTML/CSS) dalla logica applicativa. Quindi, forniva intenzionalmente un linguaggio più limitato rispetto a PHP stesso, in modo che lo sviluppatore non potesse, ad esempio, eseguire una query al database dal template, ecc. D'altra parte, rappresentava un'ulteriore dipendenza nei progetti, aumentava la loro complessità e i programmatori dovevano imparare un nuovo linguaggio Smarty. Tale vantaggio era discutibile e si continuò a utilizzare PHP semplice per i template.
Nel corso del tempo, i sistemi di template hanno iniziato a diventare utili. Hanno introdotto il concetto di ereditarietà, la modalità sandbox e una serie di altre funzionalità che hanno semplificato notevolmente la creazione di template rispetto a PHP puro. È emerso il tema della sicurezza, l'esistenza di vulnerabilità come XSS e la necessità di escaping. I sistemi di template hanno introdotto l'autoescaping per eliminare il rischio che il programmatore se ne dimenticasse e si creasse una grave falla di sicurezza (tra poco vedremo che questo presenta alcuni tranelli).
I vantaggi dei sistemi di template oggi superano di gran lunga i costi associati alla loro implementazione. Pertanto, ha senso utilizzarli.
Perché Latte è migliore di Twig o Blade?
Ci sono diverse ragioni – alcune sono piacevoli e altre fondamentalmente utili. Latte è una combinazione di piacevole e utile.
Prima quella piacevole: Latte ha la stessa sintassi
di PHP. Differisce solo la scrittura dei tag, invece di <?=
e ?>
preferisce i più brevi
{
e }
. Ciò significa che non è necessario imparare un nuovo linguaggio. I costi di formazione sono
minimi. E soprattutto, durante lo sviluppo non è necessario “passare” continuamente tra il linguaggio PHP e il linguaggio del
template, poiché sono entrambi uguali. A differenza dei template Twig, che utilizzano il linguaggio Python, e il programmatore
deve quindi passare tra due linguaggi diversi.
E ora la ragione estremamente utile: Tutti i sistemi di template, come Twig, Blade o Smarty, hanno introdotto nel
corso dell'evoluzione la protezione contro XSS sotto forma di escaping automatico. Più
precisamente, la chiamata automatica della funzione htmlspecialchars()
. Ma i creatori di Latte si sono resi conto
che questa non era affatto la soluzione giusta. Perché in diverse parti del documento l'escaping avviene in modi diversi.
L'autoescaping ingenuo è una funzione pericolosa perché crea un falso senso di sicurezza.
Affinché l'autoescaping sia funzionale e affidabile, deve riconoscere in quale punto del documento vengono visualizzati i dati (li chiamiamo contesti) e scegliere la funzione di escaping in base ad esso. Quindi deve essere sensibile al contesto. E questo è proprio ciò che Latte sa fare. Capisce l'HTML. Non percepisce il template solo come una stringa di caratteri, ma capisce cosa sono i tag, gli attributi, ecc. E quindi esegue l'escaping in modo diverso nel testo HTML, diversamente all'interno di un tag HTML, diversamente all'interno di JavaScript, ecc.
Latte è il primo e unico sistema di template in PHP ad avere l'escaping sensibile al contesto. Rappresenta quindi l'unico sistema di template veramente sicuro.
E un'altra ragione piacevole: Grazie al fatto che Latte capisce l'HTML, offre altre funzionalità molto piacevoli. Ad esempio, gli n:attributi. O la capacità di controllare i link. E molte altre.
Cos'è l'escaping?
L'escaping è il processo che consiste nel sostituire i caratteri con un significato speciale con sequenze corrispondenti
quando si inserisce una stringa in un'altra, per evitare fenomeni indesiderati o errori. Ad esempio, quando inseriamo una stringa
in un testo HTML, in cui il carattere <
ha un significato speciale, poiché indica l'inizio di un tag, lo
sostituiamo con la sequenza corrispondente, che è l'entità HTML <
. Grazie a ciò, il browser visualizzerà
correttamente il simbolo <
.
Un semplice esempio di escaping direttamente durante la scrittura del codice in PHP è l'inserimento di virgolette in una stringa, anteponendo ad esse una barra rovesciata.
Analizziamo l'escaping in modo più dettagliato nel capitolo Come difendersi da XSS.
È possibile eseguire una query al database dal template in Latte?
Nei template è possibile lavorare con oggetti che il programmatore passa loro. Se quindi il programmatore lo desidera, può passare al template un oggetto database ed eseguire una query su di esso. Se ha tale intenzione, non c'è motivo di impedirglielo.
Una situazione diversa si verifica se si desidera dare la possibilità di modificare i template a clienti o codificatori esterni. In tal caso, sicuramente non si desidera che abbiano accesso al database. Ovviamente non si passerà l'oggetto database al template, ma cosa succede se è possibile accedervi tramite un altro oggetto? La soluzione è la modalità sandbox, che consente di definire quali metodi possono essere chiamati nei template. Grazie a ciò, non è necessario preoccuparsi di violazioni della sicurezza.
Quali sono le principali differenze tra sistemi di template come Latte, Twig e Blade?
Le differenze tra i sistemi di template Latte, Twig e Blade risiedono principalmente nella sintassi, nella sicurezza e nel modo di integrazione nei framework
- Latte: utilizza la sintassi del linguaggio PHP, il che facilita l'apprendimento e l'uso. Fornisce una protezione di prim'ordine contro gli attacchi XSS.
- Twig: utilizza la sintassi del linguaggio Python, che differisce notevolmente da PHP. Esegue l'escaping senza distinzione di contesto. È ben integrato nel framework Symfony.
- Blade: utilizza un mix di PHP e sintassi propria. Esegue l'escaping senza distinzione di contesto. È strettamente integrato con le funzioni e l'ecosistema di Laravel.
Conviene alle aziende utilizzare un sistema di template?
Innanzitutto, i costi associati alla formazione, all'uso e al beneficio complessivo variano significativamente a seconda del sistema. Il sistema di template Latte, grazie al fatto che utilizza la sintassi PHP, semplifica notevolmente l'apprendimento per i programmatori già familiari con questo linguaggio. Di solito ci vogliono poche ore prima che un programmatore familiarizzi sufficientemente con Latte. Riduce quindi i costi di formazione. Allo stesso tempo, accelera l'adozione della tecnologia e soprattutto l'efficienza nell'uso quotidiano.
Inoltre, Latte fornisce un elevato livello di protezione contro la vulnerabilità XSS grazie alla tecnologia unica di escaping sensibile al contesto. Questa protezione è fondamentale per garantire la sicurezza delle applicazioni web e minimizzare il rischio di attacchi che potrebbero mettere in pericolo gli utenti o i dati aziendali. La protezione della sicurezza delle applicazioni web è importante anche per mantenere una buona reputazione dell'azienda. I problemi di sicurezza possono causare la 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 manutenzione dell'applicazione facilitando entrambi. L'uso di un sistema di template è quindi decisamente conveniente.
Latte influisce sulle prestazioni delle applicazioni web?
Sebbene i template Latte vengano elaborati rapidamente, questo aspetto in realtà non ha importanza. Il motivo è che l'analisi dei file avviene solo una volta alla prima visualizzazione. Successivamente vengono compilati in codice PHP, salvati su disco ed eseguiti ad ogni richiesta successiva, senza la necessità di eseguire nuovamente la compilazione.
Questo è il modo in cui funziona in un ambiente di produzione. Durante lo sviluppo, i template Latte vengono ricompilati ogni volta che il loro contenuto viene modificato, in modo che lo sviluppatore veda sempre la versione attuale.