A vulnerabilidade crítica mais comum nos sites é Cross-Site Scripting (XSS). Permite que um atacante insira um script malicioso numa página de terceiros que é executado no navegador de um utilizador desprevenido. Pode modificar a página, obter informações sensíveis ou até mesmo roubar a identidade do utilizador.
Os sistemas de templates falham na defesa contra XSS. Latte é o único sistema com uma defesa eficaz, graças ao chamado escaping sensível ao contexto.
Quem quer ter um site bem seguro usa Latte.
Quiz: consegue defender-se da vulnerabilidade XSS?
Fonte dos dados: Acunetix Web Vulnerability Report
Exemplo de escaping automático da variável $text
em vários
contextos diferentes (pode editar o template superior):
{var $text = "O'Neill"} - em texto: <span>{$text}</span> - em atributo: <span title={$text}></span> - em atributo sem aspas: <span title={$text}></span> - em JavaScript: <script>var = {$text}</script>
- em texto: <span>O'Neill</span> - em atributo: <span title='O'Neill'></span> - em atributo sem aspas: <span title="O'Neill"></span> - em JavaScript: <script>var = "O'Neill"</script>
Não estamos a exagerar. Você já conhece a linguagem Latte. Já sabe como escrever expressões nela. Na verdade, elas são escritas exatamente como em PHP. Portanto, não precisa de pensar em como escrever as coisas em Latte. Não precisa de procurar na documentação. Não precisa de aprender outra linguagem. Você simplesmente escreve como em PHP. Mais sobre a sintaxe Latte
<ul>
{foreach $users as $user}
<li>{$user->name}</li>
{/foreach}
</ul>
{if $post->status === Status::Published}
Ler post
{elseif count($posts) > 0}
Ver outros posts
{/if}
{$product?->getDiscount()}
{$foo[0] + strlen($bar[Bar::Const])}
{array_filter($nums, fn($n) => $n < 100)}
Latte é baseado em PHP, enquanto Twig é baseado em Python. Um designer em
Latte não precisa de alternar constantemente entre duas convenções
diferentes. Por exemplo, entre for person in people
nos templates e
foreach $people as $person
em PHP. Ele nem precisa de pensar sobre
onde usar {% %}
e onde usar {{ }}
, porque Latte tem um
delimitador {...}
.
Experimente a ferramenta de conversão de templates Twig para 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>
Os utilizadores adoram esta funcionalidade. Chamamo-la de
n:atributos. Qualquer tag emparelhada, como
{if} ... {/if}
, envolvendo um elemento HTML, pode ser escrita como
seu atributo n:if
. Isso resulta numa notação muito eficiente. Os
atributos também podem ter os prefixos inner-
e tag-
,
então o comportamento aplica-se ao interior do elemento ou às tags HTML de
abertura e fecho, respetivamente. Mais sobre n-atributos
Usando n:atributos:
<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>
O mesmo sem eles:
{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 tem suporte nativo no NetBeans e um excelente plugin para PhpStorm que sugere tags, filtros e código PHP.
Mantenha-se atualizado. O plugin para Tracy informa em cada página quais templates e quais variáveis estão a ser renderizadas.
Latte é um sistema de templates da próxima geração – ele entende HTML. Onde outros sistemas veem apenas um monte de caracteres, Latte vê elementos HTML. É por isso que ele tem duas características incríveis como escaping sensível ao contexto e n:atributos.
Como Blade, Twig e outros sistemas veem o template
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Como Latte vê o template
<!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>
Mecanismos sofisticados de reutilização e herança de templates aumentam a sua produtividade, pois cada template contém apenas o seu conteúdo exclusivo, e elementos e estruturas repetidos são reutilizados.
Latte tem um bunker blindado diretamente sob o capô. É chamado de modo sandbox e isola templates de fontes não confiáveis, como aquelas editadas pelos próprios utilizadores. Fornece-lhes acesso limitado a tags, filtros, funções, métodos, etc. Como funciona?
Latte compila templates em tempo de execução para código PHP otimizado. Portanto, é tão rápido quanto se você estivesse a escrever PHP puro. O código compilado é claro e pode depurá-lo facilmente. Claro, ele é recompilado sempre que o template é alterado.
Desenvolvemos o Latte há mais de 18 anos – e o número continua a crescer! As bibliotecas que fornecemos são, portanto, muito maduras, estáveis e amplamente utilizadas. São confiáveis por várias corporações globais e alimentam muitos sites importantes. Quem usa e confia no Latte?
A documentação é elogiada pelos leitores pela sua clareza e abrangência. Desejamos-lhe uma leitura agradável.
Latte é de código aberto e pode usá-lo completamente de graça.