Por que usar templates?
- Por que devo usar um sistema de templates em PHP?
- Por que Latte é melhor que Twig ou Blade?
- O que é escaping?
- É possível fazer uma consulta ao banco de dados a partir de um template Latte?
- Quais são as principais diferenças entre sistemas de templates como Latte, Twig e Blade?
- Vale a pena para as empresas usar um sistema de templates?
- O Latte afeta o desempenho das aplicações web?
Por que devo usar um sistema de templates em PHP?
Por que usar um sistema de templates em PHP, quando o próprio PHP é uma linguagem de template?
Vamos primeiro recapitular brevemente a história desta linguagem, que está cheia de reviravoltas interessantes. Uma das primeiras linguagens de programação usadas para gerar páginas HTML foi a linguagem C. No entanto, logo se mostrou que seu uso para esse fim era impraticável. Rasmus Lerdorf então criou o PHP, que facilitou a geração de HTML dinâmico com a linguagem C no backend. O PHP foi, portanto, originalmente projetado como uma linguagem de template, mas com o tempo ganhou recursos adicionais e se tornou uma linguagem de programação completa.
Apesar disso, ainda funciona como uma linguagem de template. Em um arquivo PHP, pode haver uma página HTML escrita, na qual
variáveis são exibidas usando <?= $foo ?>
, etc.
Já nos primórdios da história do PHP, surgiu o sistema de templates Smarty, cujo propósito era separar estritamente a aparência (HTML/CSS) da lógica da aplicação. Ou seja, ele fornecia intencionalmente uma linguagem mais limitada que o próprio PHP, para que o desenvolvedor não pudesse, por exemplo, fazer uma consulta ao banco de dados a partir do template, etc. Por outro lado, representava uma dependência adicional nos projetos, aumentava sua complexidade e os programadores tinham que aprender a nova linguagem Smarty. Tal benefício era questionável e o PHP simples continuou a ser usado para templates.
Com o tempo, os sistemas de templates começaram a se tornar úteis. Eles introduziram o conceito de herança, modo sandbox e uma série de outros recursos que simplificaram significativamente a criação de templates em comparação com o PHP puro. O tema da segurança ganhou destaque, a existência de vulnerabilidades como XSS e a necessidade de escaping. Os sistemas de templates introduziram o autoescaping para eliminar o risco de o programador esquecer e criar uma séria falha de segurança (em breve mostraremos que isso tem certas armadilhas).
Os benefícios dos sistemas de templates hoje superam significativamente os custos associados à sua implementação. Portanto, faz sentido usá-los.
Por que Latte é melhor que Twig ou Blade?
Existem várias razões – algumas são agradáveis e outras fundamentalmente úteis. Latte é uma combinação do agradável com o útil.
Primeiro, o agradável: Latte tem a mesma sintaxe do
PHP. Apenas a notação das tags difere, em vez de <?=
e ?>
, prefere os mais curtos
{
e }
. Isso significa que você não precisa aprender uma nova linguagem. Os custos de treinamento são
mínimos. E, principalmente, durante o desenvolvimento, você não precisa constantemente “alternar” entre a linguagem PHP e
a linguagem do template, pois ambas são iguais. Ao contrário dos templates Twig, que usam a linguagem Python, e o programador
precisa alternar entre duas linguagens diferentes.
E agora a razão extremamente útil: Todos os sistemas de templates, como Twig, Blade ou Smarty, evoluíram para
incluir proteção contra XSS na forma de escaping automático. Mais precisamente, a
chamada automática da função htmlspecialchars()
. No entanto, os criadores do Latte perceberam que essa não era a
solução correta. Porque em diferentes partes do documento, o escaping é feito de maneiras diferentes. O autoescaping ingênuo
é uma função perigosa porque cria uma falsa sensação de segurança.
Para que o autoescaping seja funcional e confiável, ele deve reconhecer em qual parte do documento os dados estão sendo exibidos (chamamos de contextos) e escolher a função de escaping de acordo. Ou seja, deve ser sensível ao contexto. E é exatamente isso que o Latte faz. Ele entende HTML. Ele não vê o template apenas como uma sequência de caracteres, mas entende o que são tags, atributos, etc. E, portanto, escapa de forma diferente no texto HTML, dentro de uma tag HTML, dentro de JavaScript, etc.
Latte é o primeiro e único sistema de templates em PHP que possui escaping sensível ao contexto. Representa, assim, o único sistema de templates verdadeiramente seguro.
E mais uma razão agradável: Graças ao fato de que o Latte entende HTML, ele oferece outros recursos muito agradáveis. Por exemplo, n:atributos. Ou a capacidade de verificar links. E muitos outros.
O que é escaping?
Escaping é o processo que consiste em substituir caracteres com significado especial pelas sequências correspondentes ao
inserir uma string em outra, para evitar fenômenos indesejados ou erros. Por exemplo, ao inserir uma string em texto HTML, onde
o caractere <
tem um significado especial, pois indica o início de uma tag, substituímo-lo pela sequência
correspondente, que é a entidade HTML <
. Graças a isso, o navegador exibirá corretamente o símbolo
<
.
Um exemplo simples de escaping diretamente ao escrever código em PHP é inserir aspas em uma string, precedendo-as com uma barra invertida.
Discutimos o escaping em mais detalhes no capítulo Como se defender de XSS.
É possível fazer uma consulta ao banco de dados a partir de um template Latte?
Nos templates, é possível trabalhar com objetos que o programador passa para eles. Portanto, se o programador quiser, ele pode passar um objeto de banco de dados para o template e executar uma consulta nele. Se essa for a intenção, não há razão para impedi-lo.
Uma situação diferente surge se você quiser dar a possibilidade de editar templates a clientes ou codificadores externos. Nesse caso, você definitivamente não quer que eles tenham acesso ao banco de dados. Claro, você não passará o objeto do banco de dados para o template, mas e se for possível acessá-lo através de outro objeto? A solução é o modo sandbox, que permite definir quais métodos podem ser chamados nos templates. Graças a isso, você não precisa se preocupar com violações de segurança.
Quais são as principais diferenças entre sistemas de templates como Latte, Twig e Blade?
As diferenças entre os sistemas de templates Latte, Twig e Blade residem principalmente na sintaxe, segurança e método de integração em frameworks.
- Latte: usa a sintaxe da linguagem PHP, o que facilita o aprendizado e o uso. Fornece proteção de ponta contra ataques XSS.
- Twig: usa a sintaxe da linguagem Python, que difere bastante do PHP. Escapa sem distinguir o contexto. Está bem integrado ao framework Symfony.
- Blade: usa uma mistura de PHP e sintaxe própria. Escapa sem distinguir o contexto. Está intimamente integrado com as funções e o ecossistema do Laravel.
Vale a pena para as empresas usar um sistema de templates?
Primeiramente, os custos associados ao treinamento, uso e benefício geral variam significativamente dependendo do sistema. O sistema de templates Latte, por usar a sintaxe PHP, simplifica muito o aprendizado para programadores já familiarizados com essa linguagem. Geralmente, leva algumas horas para um programador se familiarizar suficientemente com o Latte. Reduz, portanto, os custos de treinamento. Ao mesmo tempo, acelera a adoção da tecnologia e, principalmente, a eficiência no uso diário.
Além disso, o Latte fornece um alto nível de proteção contra a vulnerabilidade XSS graças à tecnologia única de escaping sensível ao contexto. Essa proteção é crucial para garantir a segurança das aplicações web e minimizar o risco de ataques que poderiam comprometer usuários ou dados da empresa. A proteção da segurança das aplicações web também é importante para manter a boa reputação da empresa. Problemas de segurança podem causar perda de confiança por parte dos clientes e prejudicar a reputação da empresa no mercado.
O uso do Latte também reduz os custos gerais de desenvolvimento e manutenção da aplicação, facilitando ambos. Portanto, o uso de um sistema de templates definitivamente vale a pena.
O Latte afeta o desempenho das aplicações web?
Embora os templates Latte sejam processados rapidamente, esse aspecto na verdade não importa. A razão é que a análise dos arquivos ocorre apenas uma vez na primeira exibição. Posteriormente, eles são compilados em código PHP, armazenados em disco e executados a cada requisição subsequente, sem a necessidade de recompilação.
Esta é a forma como funciona em um ambiente de produção. Durante o desenvolvimento, os templates Latte são recompilados toda vez que seu conteúdo é alterado, para que o desenvolvedor veja sempre a versão atual.