La vulnerabilidad crítica más común en los sitios web es Cross-Site Scripting (XSS). Permite a un atacante insertar un script malicioso en una página que se ejecuta en el navegador de un usuario desprevenido. Puede modificar la página, obtener información sensible o incluso robar la identidad del usuario.
Los sistemas de plantillas fallan en la defensa contra XSS. Latte es el único sistema con una defensa eficaz, gracias al llamado escapado sensible al contexto.
Quien quiera un sitio web bien seguro, usa Latte.
Cuestionario: ¿Puedes defenderte de la vulnerabilidad XSS?
Fuente de datos: Acunetix Web Vulnerability Report
Ejemplo de escapado automático de la variable $text
en varios
contextos diferentes (puedes editar la plantilla superior):
{var $text = "O'Neill"} - en texto: <span>{$text}</span> - en atributo: <span title={$text}></span> - en atributo sin comillas: <span title={$text}></span> - en JavaScript: <script>var = {$text}</script>
- en texto: <span>O'Neill</span> - en atributo: <span title='O'Neill'></span> - en atributo sin comillas: <span title="O'Neill"></span> - en JavaScript: <script>var = "O'Neill"</script>
No exageramos. Realmente ya conoces el lenguaje Latte. Ya sabes escribir expresiones en él. Se escriben exactamente igual que en PHP. Así que no tienes que pensar en cómo se escribe algo en Latte. No tienes que buscar en la documentación. No tienes que aprender otro lenguaje. Simplemente escribes como en PHP. Más sobre la sintaxis de Latte
<ul>
{foreach $users as $user}
<li>{$user->name}</li>
{/foreach}
</ul>
{if $post->status === Status::Published}
Read post
{elseif count($posts) > 0}
See other posts
{/if}
{$product?->getDiscount()}
{$foo[0] + strlen($bar[Bar::Const])}
{array_filter($nums, fn($n) => $n < 100)}
Latte se basa en PHP, mientras que Twig se basa en Python. Un diseñador en
Latte no tiene que cambiar constantemente entre dos convenciones diferentes. Por
ejemplo, entre for person in people
en plantillas y
foreach $people as $person
en PHP. Tampoco tiene que pensar dónde
usar {% %}
y dónde {{ }}
, porque Latte tiene un
delimitador {...}
.
Prueba la herramienta para convertir plantillas Twig a Latte.
<ul>
{foreach $foo->items as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
<ul>
{% for item in foo.items %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
A los usuarios les encanta esta característica. La llamamos
n:attributes. Cualquier etiqueta emparejada, como
{if} … {/if}
, que envuelva un elemento HTML, se puede escribir
como su atributo n:if
. Esto logra una notación muy económica. Los
atributos también pueden tener los prefijos inner-
y
tag-
, entonces el comportamiento se aplica al interior del elemento
o a las etiquetas HTML de apertura y cierre respectivamente. Más sobre
n-attributes
Usando n:attributes:
<ul n:if="count($menu) > 1" class="menu">
<li n:foreach="$menu as $item">
<a n:tag-if="$item->href" href={$item->href}>
{$item->caption}
</a>
</li>
</ul>
Lo mismo sin ellos:
{if count($menu) > 1}
<ul class="menu">
{foreach $menu as $item}
<li>
{if $item->href}<a href={$item->href}>{/if}
{$item->caption}
{if $item->href}</a>{/if}
</li>
{/foreach}
</ul>
{/if}
Latte tiene soporte nativo en NetBeans y un excelente plugin para PhpStorm que sugiere etiquetas, filtros y código PHP.
Mantente siempre informado. El plugin para Tracy informa en cada página qué plantillas y qué variables se están renderizando.
Latte es un sistema de plantillas de nueva generación: entiende el lenguaje HTML. Donde otros sistemas solo ven un montón de caracteres, Latte ve elementos HTML. Por eso tiene dos características asombrosas, como el escapado sensible al contexto y los n:attributes.
Cómo ven la plantilla Blade, Twig y otros sistemas
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Cómo ve la plantilla Latte
<!DOCTYPE html>
<html>
<head>
<title>It's all about context</title>
<meta name="description" content={include description}>
</head>
<body>
<ul class="navigation">
{foreach $navigation as $item}
<li><a href={$item->link}>{$item->title}</a></li>
{/foreach}
</ul>
<script>
var appName = {$appName};
</script>
</body>
</html>
Los sofisticados mecanismos de reutilización y herencia de plantillas aumentan tu productividad, ya que cada plantilla contiene solo su contenido único y los elementos y estructuras repetidos se reutilizan.
Latte tiene un búnker blindado justo debajo del capó. Se llama modo sandbox y aísla las plantillas de fuentes no confiables, como las editadas por los propios usuarios. Les proporciona acceso limitado a etiquetas, filtros, funciones, métodos, etc. ¿Cómo funciona?
Latte compila las plantillas en tiempo de ejecución a código PHP óptimo. Así que es exactamente tan rápido como si escribieras PHP puro. El código compilado es claro y puedes depurarlo fácilmente. Por supuesto, se recompila cada vez que se cambia la plantilla.
Hemos estado desarrollando Latte durante más de 18 años, ¡y la cifra sigue creciendo! Las bibliotecas que proporcionamos son, por lo tanto, muy maduras, estables y ampliamente utilizadas. Confían en ellas numerosas corporaciones globales y potencian muchos sitios web importantes. ¿Quién usa y confía en Latte?
Los lectores elogian la documentación por su claridad y exhaustividad. Le deseamos una agradable lectura.
Latte es de código abierto y puedes usarlo completamente gratis.
The first version of Latte 2 was released in 2014 as part of the then revolutionary splitting of the framework into a collection of standalone libraries. Version 3 of Latte, representing a major evolutionary leap was released just over a year ago.