¿Por qué usar plantillas?
- ¿Por qué debería usar un sistema de plantillas en PHP?
- ¿Por qué Latte es mejor que Twig o Blade?
- ¿Qué es el escapado?
- ¿Se puede realizar una consulta a la base de datos desde una plantilla Latte?
- ¿Cuáles son las principales diferencias entre los sistemas de plantillas como Latte, Twig y Blade?
- ¿Vale la pena para las empresas usar un sistema de plantillas?
- ¿Afecta Latte al rendimiento de las aplicaciones web?
¿Por qué debería usar un sistema de plantillas en PHP?
¿Por qué usar un sistema de plantillas en PHP, si PHP es en sí mismo un lenguaje de plantillas?
Primero, recapitulemos brevemente la historia de este lenguaje, que está llena de giros interesantes. Uno de los primeros lenguajes de programación utilizados para generar páginas HTML fue el lenguaje C. Sin embargo, pronto se demostró que su uso para este propósito era poco práctico. Rasmus Lerdorf creó entonces PHP, que facilitó la generación de HTML dinámico con C en el backend. Por lo tanto, PHP fue diseñado originalmente como un lenguaje de plantillas, pero con el tiempo adquirió funciones adicionales y se convirtió en un lenguaje de programación completo.
A pesar de ello, sigue funcionando también como lenguaje de plantillas. En un archivo PHP se puede escribir una página HTML,
en la que se imprimen variables usando <?= $foo ?>
, etc.
Ya en los inicios de la historia de PHP surgió el sistema de plantillas Smarty, cuyo propósito era separar estrictamente la apariencia (HTML/CSS) de la lógica de la aplicación. Es decir, proporcionaba intencionadamente un lenguaje más limitado que el propio PHP, para que el desarrollador no pudiera, por ejemplo, realizar una consulta a la base de datos desde la plantilla, etc. Por otro lado, representaba una dependencia adicional en los proyectos, aumentaba su complejidad y los programadores tenían que aprender un nuevo lenguaje Smarty. Tal beneficio era cuestionable y se siguió utilizando PHP simple para las plantillas.
Con el tiempo, los sistemas de plantillas comenzaron a ser útiles. Introdujeron el concepto de herencia, modo sandbox y una serie de otras características que simplificaron significativamente la creación de plantillas en comparación con PHP puro. El tema de la seguridad, la existencia de vulnerabilidades como XSS y la necesidad de escapado pasaron a primer plano. Los sistemas de plantillas introdujeron el autoescapado para eliminar el riesgo de que el programador lo olvidara y se creara una grave brecha de seguridad (en un momento mostraremos que esto tiene ciertos inconvenientes).
Los beneficios de los sistemas de plantillas hoy en día superan con creces los costos asociados a su implementación. Por eso tiene sentido usarlos.
¿Por qué Latte es mejor que Twig o Blade?
Hay varias razones – algunas son agradables y otras fundamentalmente útiles. Latte es una combinación de lo agradable y lo útil.
Primero lo agradable: Latte tiene la misma sintaxis
que PHP. Solo difiere la escritura de las etiquetas, en lugar de <?=
y ?>
prefiere las más
cortas {
y }
. Esto significa que no necesita aprender un nuevo lenguaje. Los costos de capacitación son
mínimos. Y lo más importante, durante el desarrollo no tiene que “cambiar” constantemente entre el lenguaje PHP y el
lenguaje de plantilla, ya que ambos son iguales. A diferencia de las plantillas Twig, que usan la sintaxis de Python, y el
programador tiene que cambiar entre dos lenguajes diferentes.
Y ahora la razón inmensamente útil: Todos los sistemas de plantillas, como Twig, Blade o Smarty, introdujeron a lo
largo de su evolución la protección contra XSS en forma de escapado automático. Más
precisamente, la llamada automática de la función htmlspecialchars()
. Sin embargo, los creadores de Latte se dieron
cuenta de que esta no era en absoluto la solución correcta. Porque en diferentes lugares del documento se escapa de diferentes
maneras. El autoescapado ingenuo es una función peligrosa porque crea una falsa sensación de seguridad.
Para que el autoescapado sea funcional y fiable, debe reconocer en qué lugar del documento se imprimen los datos (los llamamos contextos) y elegir la función de escapado según él. Es decir, debe ser sensible al contexto. Y esto es precisamente lo que Latte sabe hacer. Entiende HTML. No percibe la plantilla solo como una cadena de caracteres, sino que comprende qué son las etiquetas, los atributos, etc. Y por eso escapa de manera diferente en el texto HTML, de manera diferente dentro de una etiqueta HTML, de manera diferente dentro de JavaScript, etc.
Latte es el primer y único sistema de plantillas en PHP que tiene escapado sensible al contexto. Representa así el único sistema de plantillas verdaderamente seguro.
Y una razón agradable más: Gracias a que Latte entiende HTML, ofrece otras características muy agradables. Por ejemplo, los n:atributos. O la capacidad de verificar enlaces. Y muchas otras.
¿Qué es el escapado?
El escapado es el proceso que consiste en reemplazar caracteres con un significado especial por secuencias correspondientes al
insertar una cadena en otra, para evitar fenómenos no deseados o errores. Por ejemplo, cuando insertamos una cadena en texto
HTML, donde el carácter <
tiene un significado especial, ya que indica el inicio de una etiqueta, lo reemplazamos
por la secuencia correspondiente, que es la entidad HTML <
. Gracias a esto, el navegador mostrará
correctamente el símbolo <
.
Un ejemplo simple de escapado directamente al escribir código en PHP es insertar una comilla en una cadena, anteponiéndole una barra invertida.
Analizamos el escapado con más detalle en el capítulo Cómo defenderse de XSS.
¿Se puede realizar una consulta a la base de datos desde una plantilla Latte?
En las plantillas se puede trabajar con objetos que el programador les pasa. Por lo tanto, si el programador lo desea, puede pasar un objeto de base de datos a la plantilla y realizar una consulta sobre él. Si tiene esa intención, no hay razón para impedírselo.
Una situación diferente surge si desea dar la posibilidad de editar plantillas a clientes o codificadores externos. En tal caso, definitivamente no quiere que tengan acceso a la base de datos. Por supuesto, no pasará el objeto de la base de datos a la plantilla, pero ¿y si se puede acceder a él a través de otro objeto? La solución es el modo sandbox, que permite definir qué métodos se pueden llamar en las plantillas. Gracias a esto, no tiene que preocuparse por violaciones de seguridad.
¿Cuáles son las principales diferencias entre los sistemas de plantillas como Latte, Twig y Blade?
Las diferencias entre los sistemas de plantillas Latte, Twig y Blade radican principalmente en la sintaxis, la seguridad y la forma de integración en los frameworks
- Latte: utiliza la sintaxis del lenguaje PHP, lo que facilita el aprendizaje y el uso. Proporciona una protección de primer nivel contra ataques XSS.
- Twig: utiliza la sintaxis del lenguaje Python, que difiere bastante de PHP. Escapa sin distinguir el contexto. Está bien integrado en el framework Symfony.
- Blade: utiliza una mezcla de PHP y sintaxis propia. Escapa sin distinguir el contexto. Está estrechamente integrado con las funciones y el ecosistema de Laravel.
¿Vale la pena para las empresas usar un sistema de plantillas?
En primer lugar, los costos asociados con la capacitación, el uso y el beneficio general varían significativamente según el sistema. El sistema de plantillas Latte, gracias a que utiliza la sintaxis de PHP, simplifica enormemente el aprendizaje para los programadores ya familiarizados con este lenguaje. Por lo general, un programador tarda unas pocas horas en familiarizarse lo suficiente con Latte. Por lo tanto, reduce los costos de capacitación. Al mismo tiempo, acelera la adopción de la tecnología y, sobre todo, la eficiencia en el uso diario.
Además, Latte proporciona un alto nivel de protección contra la vulnerabilidad XSS gracias a la tecnología única de escapado sensible al contexto. Esta protección es crucial para garantizar la seguridad de las aplicaciones web y minimizar el riesgo de ataques que podrían poner en peligro a los usuarios o los datos de la empresa. La protección de la seguridad de las aplicaciones web también es importante para mantener una buena reputación de la empresa. Los problemas de seguridad pueden causar la pérdida de confianza por parte de los clientes y dañar la reputación de la empresa en el mercado.
El uso de Latte también reduce los costos generales de desarrollo y mantenimiento de la aplicación al facilitar ambos. Por lo tanto, el uso de un sistema de plantillas definitivamente vale la pena.
¿Afecta Latte al rendimiento de las aplicaciones web?
Aunque las plantillas Latte se procesan rápidamente, este aspecto en realidad no importa. La razón es que el análisis de los archivos ocurre solo una vez durante la primera visualización. Posteriormente, se compilan en código PHP, se almacenan en el disco y se ejecutan en cada solicitud posterior, sin necesidad de realizar una recompilación.
Así es como funciona en un entorno de producción. Durante el desarrollo, las plantillas Latte se recompilan cada vez que se modifica su contenido, para que el desarrollador siempre vea la versión actual.