La vulnerabilidad crítica más común en los sitios web es el 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 no defienden contra XSS. Latte es el único sistema con una defensa eficaz, gracias al escape sensible al contexto.
Cualquiera que desee un sitio web bien protegido utiliza Latte.
Cuestionario: ¿Puede defenderse de una vulnerabilidad XSS?
Fuente: Informe de Vulnerabilidad Web de Acunetix
Ejemplo de escape automático de la variable $text
en varios
contextos diferentes (puede editar la plantilla superior):
{var $text = "O'Neill"} - en texto: <span>{$texto}</span> - en atributo: <span title={$text}></span> - en atributo no entrecomillado: <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 no entrecomillado: <span title="O'Neill"></span> - en JavaScript: <script>var = "O'Neill"</script>
No bromeamos, ya conoces la lengua latina. Ya sabes cómo escribir expresiones en él. De hecho, están escritas exactamente igual que en PHP. Así que no tienes que pensar en cómo escribir cosas en Latte. No tienes que buscar en la documentación. No tienes que aprender otro lenguaje. Simplemente escribe 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}
Leer post
{elseif count($posts) > 0}
Ver otros 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. Ni siquiera tiene que pensar
dónde usar {% %}
y dónde usar {{ }}
, porque Latte
tiene un delimitador {...}
.
Pruebe la herramienta Twig to Latte tool.
<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 función. La llamamos
n:attributes. Cualquier etiqueta emparejada, como {if} ... {/if}
{if} ... {/if}
envuelve un elemento HTML puede escribirse como su
atributo n: n:if
. Se trata de una notación muy eficaz. Los
atributos también pueden tener prefijos inner-
y
tag-
, en cuyo caso el comportamiento se aplica al interior del
elemento y a las etiquetas HTML inicial y final, respectivamente. Más información sobre
n-attributes
Uso de 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>
Y 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.
Manténgase en contacto. El plugin para Tracy le informa en cada página de qué plantillas y qué variables se están renderizando.
Latte es un sistema de plantillas de nueva generación: entiende HTML. Donde otros sistemas sólo ven un montón de caracteres, Latte ve elementos HTML. Esta es la razón por la que tiene dos características sorprendentes como escape sensible al contexto y n:attributes.
Cómo Blade, Twig y otros sistemas ven la plantilla
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Cómo ve Latte la plantilla
<!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 su productividad porque cada plantilla contiene sólo su contenido único, y los elementos y estructuras repetidos se reutilizan.
El Latte tiene un búnker blindado bajo el capó. Se llama modo sandbox, y aísla las plantillas de fuentes no fiables, como las editadas por los propios usuarios. Les da acceso limitado a etiquetas, filtros, funciones, métodos, etc. ¿Cómo funciona?
Latte compila la plantilla hasta el código PHP óptimo al mismo tiempo que usted trabaja. Así que es tan rápido como si creara puramente PHP. El código PHP compilado es claro y fácil de depurar. La plantilla se recompila automáticamente cada vez que cambiamos el archivo fuente.
Hemos estado desarrollando Latte durante más de 15 años, ¡y seguimos sumando! Las librerías que proporcionamos son por lo tanto altamente maduras, estables y ampliamente utilizadas. Muchas empresas internacionales confían en ellas y muchos sitios web importantes confían en nosotros. ¿Quién utiliza 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 su uso es totalmente gratuito.
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.