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 da un template Latte?
- Quali sono le principali differenze tra sistemi di template come Latte, Twig e Blade?
- Conviene alle aziende usare 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, ricca di svolte interessanti. Uno dei primi linguaggi di programmazione usati per generare pagine HTML fu il C. Ben presto però risultò evidente che impiegarlo a questo scopo era poco pratico. Rasmus Lerdorf creò quindi PHP, che semplificava la generazione di HTML dinamico con il C sul backend. PHP nacque come linguaggio di template, ma nel tempo acquisì altre funzionalità fino a diventare un linguaggio di programmazione a tutti gli effetti.
Ciò nonostante funziona ancora come linguaggio di template. Un file PHP può contenere una pagina HTML nella quale le
variabili vengono stampate con <?= $foo ?> e simili.
Agli albori di PHP nacque il sistema di template Smarty, il cui scopo era separare rigorosamente la presentazione (HTML/CSS) dalla logica applicativa. Offriva deliberatamente un linguaggio più limitato di PHP stesso, così che, per esempio, uno sviluppatore non potesse eseguire una query al database da un template. D'altra parte rappresentava una dipendenza in più nei progetti, ne aumentava la complessità e costringeva i programmatori a imparare il nuovo linguaggio di Smarty. Vantaggi del genere erano discutibili, e per i template si continuò a usare il semplice PHP.
Col tempo i sistemi di template cominciarono a rivelarsi utili. Introdussero concetti come l'ereditarietà, la modalità sandbox e una serie di altre funzionalità che semplificavano notevolmente la creazione dei template rispetto al puro PHP. Passarono in primo piano il tema della sicurezza, l'esistenza di vulnerabilità come l'XSS e la necessità dell'escaping. I sistemi di template introdussero l'escaping automatico per eliminare il rischio che un programmatore se ne dimenticasse creando una grave falla di sicurezza (vedremo tra poco che anche questo ha le sue insidie).
Oggi i benefici dei sistemi di template superano nettamente i costi legati alla loro adozione. Ha quindi senso usarli.
Perché Latte è migliore di Twig o Blade?
Le ragioni sono diverse: alcune riguardano la comodità, altre sono di sostanziale utilità. Latte è una combinazione di comodità e utilità.
Cominciamo dal lato piacevole: Latte ha la stessa sintassi di PHP. L'unica differenza sta nella notazione dei
tag, che preferisce le più brevi { e } a <?= e ?>. Questo significa che
non dovete imparare un nuovo linguaggio. I costi di formazione sono minimi. Soprattutto, durante lo sviluppo non dovete
continuamente “passare” dal linguaggio PHP a quello dei template, perché sono la stessa cosa. A differenza dei template
Twig, che usano una sintassi simile a Python e costringono il programmatore ad alternare due linguaggi diversi.
Veniamo ora alla ragione immensamente utile: tutti i sistemi di template, come Twig, Blade o Smarty, si sono evoluti
fino a includere una protezione contro l'XSS sotto forma di escaping automatico. Più
precisamente, la chiamata automatica della funzione htmlspecialchars(). I creatori di Latte si sono però resi conto
che questa non è affatto la soluzione giusta, perché parti diverse del documento richiedono metodi di escaping diversi.
L'escaping automatico ingenuo è una funzionalità pericolosa, perché crea un falso senso di sicurezza.
Perché l'escaping automatico sia funzionale e affidabile, deve riconoscere in quale punto del documento i dati vengono stampati (chiamiamo questi punti contesti) e scegliere di conseguenza la funzione di escaping. Deve cioè essere sensibile al contesto. Ed è esattamente ciò che Latte sa fare: comprende l'HTML. Non percepisce il template come una semplice sequenza di caratteri, ma capisce cosa sono i tag, gli attributi e così via. Perciò esegue un escaping diverso nel testo HTML, all'interno dei tag HTML, dentro JavaScript e via dicendo.
Latte è il primo e unico sistema di template per PHP con escaping sensibile al contesto. È l'unico sistema di template davvero sicuro.
E un'altra ragione piacevole: proprio perché comprende l'HTML, Latte offre altre funzionalità molto gradevoli. Per esempio gli n:attributi. Oppure la possibilità di controllare i link. E molto altro.
Cos'è l'escaping?
L'escaping è il procedimento con cui, inserendo una stringa dentro un'altra, i caratteri dal significato speciale vengono
sostituiti dalle sequenze corrispondenti, per prevenire effetti indesiderati o errori. Per esempio, inserendo una stringa in un
testo HTML dove il carattere < ha un significato speciale (indica l'inizio di un tag), lo sostituiamo con la
sequenza corrispondente, cioè l'entità HTML <. In questo modo il browser può visualizzare correttamente il
simbolo <.
Un esempio semplice di escaping direttamente nella scrittura di codice PHP è l'inserimento di un apice in una stringa facendolo precedere da una barra rovesciata.
Parliamo dell'escaping più in dettaglio nel capitolo Come difendersi dall'XSS.
È possibile eseguire una query al database da un template Latte?
Nei template si può lavorare con gli oggetti che il programmatore passa loro. Se il programmatore lo desidera, può passare al template un oggetto database ed eseguirvi una query. Se questa è la sua intenzione, non c'è motivo di impedirglielo.
La situazione è diversa se volete dare ai clienti o a collaboratori esterni la possibilità di modificare i template. In tal caso non volete assolutamente che abbiano accesso al database. Naturalmente non passerete l'oggetto database al template, ma cosa succede se vi si può arrivare attraverso un altro oggetto? La soluzione è la modalità sandbox, che permette di definire quali metodi possono essere chiamati nei template. Grazie a essa non dovete temere violazioni della sicurezza.
Quali sono le principali differenze tra sistemi di template come Latte, Twig e Blade?
Le differenze tra sistemi di template come Latte, Twig e Blade riguardano soprattutto la sintassi, la sicurezza e l'integrazione con i framework:
- Latte: usa la sintassi di PHP, quindi è facile da imparare e da usare. Offre una protezione di prim'ordine contro gli attacchi XSS con l'escaping sensibile al contesto. È ben integrato con Nette Framework, ma utilizzabile anche da solo.
- Twig: usa una sintassi simile a Python, che differisce sensibilmente da PHP. Esegue l'escaping senza distinguere il
contesto (il semplice
htmlspecialchars). È ben integrato con il framework Symfony. - Blade: usa un misto di PHP e sintassi propria. Esegue l'escaping senza distinguere il contesto (il semplice
htmlspecialchars). È strettamente integrato con le funzionalità e l'ecosistema di Laravel.
Conviene alle aziende usare un sistema di template?
Innanzitutto, i costi di formazione e di utilizzo e i benefici complessivi variano sensibilmente da sistema a sistema. Il sistema di template Latte, grazie all'uso della sintassi di PHP, semplifica enormemente l'apprendimento per i programmatori che già conoscono questo linguaggio. Di solito bastano poche ore perché un programmatore prenda sufficiente confidenza con Latte, il che riduce i costi di formazione e accelera l'adozione della tecnologia e, soprattutto, l'efficienza nell'uso quotidiano.
Latte offre inoltre un elevato livello di protezione contro le vulnerabilità XSS grazie alla sua tecnologia unica di escaping sensibile al contesto. Questa protezione è essenziale 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 reputazione dell'azienda: i problemi di sicurezza possono portare alla perdita di fiducia dei clienti e danneggiare l'immagine dell'azienda sul mercato.
L'uso di Latte riduce anche i costi complessivi di sviluppo e manutenzione, rendendo più semplici entrambi. Usare un sistema di template conviene quindi senz'altro.
Latte influisce sulle prestazioni delle applicazioni web?
Sebbene i template Latte vengano elaborati rapidamente, in produzione questo aspetto non ha in realtà alcuna importanza. Il motivo è che i file dei template vengono analizzati una sola volta, alla prima visualizzazione. Vengono poi compilati in codice PHP nativo, salvati su disco ed eseguiti a ogni richiesta successiva senza bisogno di ricompilazione.
Così funziona in un ambiente di produzione. Durante lo sviluppo, invece, i template Latte vengono ricompilati a ogni modifica del loro contenuto, così lo sviluppatore vede sempre la versione corrente.