Web sitelerindeki en yaygın kritik güvenlik açığı Siteler Arası Komut Dosyası Çalıştırma'dır (XSS). Bir saldırganın, şüphelenmeyen bir kullanıcının tarayıcısında yürütülen kötü amaçlı bir betiği bir sayfaya eklemesine olanak tanır. Sayfayı değiştirebilir, hassas bilgileri alabilir veya hatta kullanıcının kimliğini çalabilir.
Şablon sistemleri XSS'e karşı savunmada başarısız olur. Latte, bağlama duyarlı kaçış sayesinde etkili bir savunmaya sahip tek sistemdir.
İyi güvenli bir web sitesi isteyen herkes Latte kullanır.
Quiz: XSS güvenlik açığına karşı savunma yapabilir misiniz?
Kaynak: Acunetix Web Güvenlik Açığı Raporu
$text
değişkeninin birkaç farklı bağlamda otomatik kaçış
örneği (üst şablonu düzenleyebilirsiniz):
{var $text = "O'Neill"} - metin içinde: <span>{$text}</span> - nitelik içinde: <span title={$text}></span> - tırnaksız nitelik içinde: <span title={$text}></span> - JavaScript içinde: <script>var = {$text}</script>
- metin içinde: <span>O'Neill</span> - nitelik içinde: <span title='O'Neill'></span> - tırnaksız nitelik içinde: <span title="O'Neill"></span> - JavaScript içinde: <script>var = "O'Neill"</script>
Abartmıyoruz, Latte dilini zaten biliyorsunuz. İçinde ifadeler yazmayı zaten biliyorsunuz. Aslında, tam olarak PHP'deki gibi yazılırlar. Yani Latte'de bir şeylerin nasıl yazılacağını düşünmenize gerek yok. Dokümantasyona bakmanıza gerek yok. Başka bir dil öğrenmenize gerek yok. Sadece PHP'deki gibi yazarsınız. Latte sözdizimi hakkında daha fazla bilgi
<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 PHP'ye dayanırken, Twig Python'a dayanır. Latte'deki bir tasarımcı
sürekli olarak iki farklı kural arasında geçiş yapmak zorunda kalmaz.
Örneğin, şablonlardaki for person in people
ile PHP'deki
foreach $people as $person
arasında. Latte'nin tek bir
{...}
sınırlayıcısı olduğu için {% %}
ve
{{ }}
kullanım yerlerini bile düşünmek zorunda kalmaz.
<ul>
{foreach $foo->items as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
<ul>
{% for item in foo.items %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
Kullanıcılar bu özelliği seviyor. Biz ona
n:nitelikler diyoruz. Bir HTML öğesini saran
{if} ... {/if}
gibi herhangi bir eşleştirilmiş etiket, onun
n:if
niteliği olarak yazılabilir. Bu çok verimli bir gösterim
sağlar. Nitelikler ayrıca inner-
ve tag-
öneklerine
sahip olabilir, bu durumda davranış sırasıyla öğenin içine veya
açılış ve kapanış HTML etiketlerine uygulanır. n-nitelikleri hakkında daha
fazla bilgi
n:nitelikleri kullanarak:
<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>
Ve Onlarsız Aynısı:
{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'nin NetBeans'te yerel desteği ve etiketleri, filtreleri ve PHP kodunu öneren PhpStorm için mükemmel bir eklentisi vardır.
İletişimde kalın. Tracy eklentisi, her sayfada hangi şablonların ve hangi değişkenlerin oluşturulduğunu size bildirir.
Latte yeni nesil bir şablon sistemidir – HTML'yi anlar. Diğer sistemlerin yalnızca bir karakter yığını gördüğü yerde, Latte HTML öğelerini görür. Bu nedenle, bağlama duyarlı kaçış ve n:nitelikleri gibi iki harika özelliği vardır.
Blade, Twig ve diğer sistemlerin şablonu nasıl gördüğü
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Latte'nin şablonu nasıl gördüğü
<!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>
Gelişmiş şablon yeniden kullanım ve kalıtım mekanizmaları, her şablon yalnızca benzersiz içeriğini içerdiğinden ve tekrarlanan öğeler ve yapılar yeniden kullanıldığından üretkenliğinizi artırır.
Latte'nin kaputunun hemen altında zırhlı bir sığınağı vardır. Buna sandbox modu denir ve kullanıcıların kendilerinin düzenlediği gibi güvenilmeyen kaynaklardan gelen şablonları yalıtır. Onlara etiketlere, filtrelere, işlevlere, yöntemlere vb. sınırlı erişim sağlar. Nasıl çalışır?
Latte, siz çalışırken şablonu aynı anda en uygun PHP koduna derler. Yani saf PHP yazmışsınız gibi hızlıdır. Derlenen PHP kodu nettir ve kolayca hata ayıklanabilir. Şablon, kaynak dosyayı her değiştirdiğimizde otomatik olarak yeniden derlenir.
Latte'yi 18 yılı aşkın süredir geliştiriyoruz – ve hala devam ediyor! Sağladığımız kütüphaneler bu nedenle son derece olgun, kararlı ve yaygın olarak kullanılmaktadır. Bir dizi küresel şirket tarafından güvenilmektedirler ve birçok önemli web sitesi bize güvenmektedir. Latte'yi kim kullanıyor ve güveniyor?
Okuyucular belgeleri netliği ve eksiksizliği nedeniyle övüyorlar. Keyifli okumalar dileriz.
Latte açık kaynaktır ve kullanımı tamamen ücretsizdir.
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.