Neden şablon kullanmalı?
- PHP'de neden bir şablon sistemi kullanmalıyım?
- Latte neden Twig'den veya Blade'den daha iyi?
- Kaçış nedir?
- Latte şablonundan veritabanı sorgusu çalıştırılabilir mi?
- Latte, Twig ve Blade gibi şablon sistemleri arasındaki başlıca farklar nelerdir?
- Şirketlerin bir şablon sistemi kullanması buna değer mi?
- Latte, web uygulamalarının performansını etkiler mi?
PHP'de neden bir şablon sistemi kullanmalıyım?
PHP'nin kendisi bir şablon dili iken, PHP'de neden bir şablon sistemi kullanılsın?
Önce bu dilin ilginç dönemeçlerle dolu tarihini kısaca hatırlayalım. HTML sayfaları üretmek için kullanılan ilk programlama dillerinden biri C'ydi. Ancak bu amaçla kullanmanın pratik olmadığı kısa sürede anlaşıldı. Rasmus Lerdorf böylece, arka planda C ile dinamik HTML üretmeyi kolaylaştıran PHP'yi yarattı. PHP başlangıçta bir şablon dili olarak tasarlandı, ama zamanla ek özellikler kazandı ve tam anlamıyla bir programlama diline dönüştü.
Yine de hâlâ bir şablon dili gibi işlev görür. Bir PHP dosyası, değişkenlerin <?= $foo ?> vb. ile
yazdırıldığı bir HTML sayfası içerebilir.
PHP'nin tarihinin erken dönemlerinde, sunumu (HTML/CSS) uygulama mantığından kesin biçimde ayırmak amacıyla Smarty şablon sistemi yaratıldı. Bilinçli olarak PHP'nin kendisinden daha sınırlı bir dil sundu; böylece örneğin bir geliştirici şablondan veritabanı sorgusu yapamıyordu. Öte yandan projelerde ek bir bağımlılık oluşturuyor, karmaşıklıklarını artırıyor ve programcıların yeni Smarty dilini öğrenmesini gerektiriyordu. Bu tür yararlar tartışmalıydı ve şablonlar için düz PHP kullanılmaya devam edildi.
Zamanla şablon sistemleri işe yarar hale gelmeye başladı. Kalıtım, sandbox modu gibi kavramları ve şablon oluşturmayı saf PHP'ye kıyasla belirgin biçimde kolaylaştıran bir dizi başka özelliği getirdiler. Güvenlik konusu, XSS gibi güvenlik açıklarının varlığı ve kaçış ihtiyacı ön plana çıktı. Şablon sistemleri, bir programcının bunu unutup ciddi bir güvenlik açığı yaratması riskini ortadan kaldırmak için otomatik kaçışı getirdi (birazdan bunun bazı tuzakları olduğunu göreceğiz).
Bugün şablon sistemlerinin yararları, devreye alınmalarıyla ilgili maliyetlere belirgin biçimde ağır basıyor. Bu yüzden onları kullanmak mantıklıdır.
Latte neden Twig'den veya Blade'den daha iyi?
Birkaç neden var; kimi rahatlıkla ilgili, kimi ise temelden yararlı. Latte, rahatlık ile yararın bir bileşimidir.
Önce hoş olanı: Latte, PHP ile aynı
sözdizimine sahiptir. Tek fark, etiketlerin yazımındadır: <?= ve ?> yerine daha kısa
{ ile } yeğlenir. Bu, yeni bir dil öğrenmenize gerek olmadığı anlamına gelir. Eğitim maliyeti en
azdır. En önemlisi, geliştirme sırasında PHP dili ile şablon dili arasında sürekli “geçiş yapmak” zorunda
kalmazsınız, çünkü ikisi aynıdır. Bu, Python benzeri sözdizimi kullanan ve programcıyı iki farklı dil arasında geçiş
yapmaya zorlayan Twig şablonlarının aksinedir.
Şimdi son derece yararlı olan nedene gelelim: Twig, Blade veya Smarty gibi tüm şablon sistemleri, XSS'e karşı
korumayı otomatik kaçış biçiminde içerecek şekilde gelişti. Daha doğrusu,
htmlspecialchars() fonksiyonunun otomatik çağrılması biçiminde. Ancak Latte'nin yaratıcıları bunun hiç de
doğru çözüm olmadığını fark etti. Çünkü belgenin farklı bölümleri farklı kaçış yöntemleri gerektirir. Saf
otomatik kaçış tehlikeli bir özelliktir, çünkü yanlış bir güvenlik duygusu yaratır.
Otomatik kaçışın işlevsel ve güvenilir olması için, verinin belgenin neresinde yazdırıldığını (bunlara bağlam diyoruz) tanıması ve kaçış fonksiyonunu buna göre seçmesi gerekir. Yani bağlama duyarlı olmalıdır. Latte'nin yapabildiği de tam olarak budur. HTML'i anlar. Şablonu yalnızca bir karakter dizisi olarak görmez, etiketlerin, niteliklerin vb. ne olduğunu kavrar. Bu yüzden HTML metninde, HTML etiketlerinin içinde, JavaScript'in içinde vb. farklı kaçış uygular.
Latte, bağlama duyarlı kaçışa sahip ilk ve tek PHP şablon sistemidir. Gerçekten güvenli olan tek şablon sistemini temsil eder.
Ve bir hoş neden daha: Latte HTML'i anladığı için başka çok hoş özellikler de sunar. Örneğin n:nitelikleri. Ya da bağlantıları denetleme yeteneği. Ve daha birçoğu.
Kaçış nedir?
Kaçış, bir dizeyi başka bir dizenin içine eklerken, istenmeyen etkileri veya hataları önlemek amacıyla özel anlamlı
karakterlerin karşılık gelen dizilerle değiştirilmesi sürecidir. Örneğin bir dizeyi, < karakterinin özel
anlam taşıdığı (bir etiketin başlangıcını gösterdiği) HTML metnine eklerken, onu karşılık gelen diziyle, yani
< HTML varlığıyla değiştiririz. Bu, tarayıcının < simgesini doğru göstermesini
sağlar.
Doğrudan PHP kodu yazarken kaçışın basit bir örneği, bir dizeye tırnak işaretini önüne ters eğik çizgi koyarak eklemektir.
Kaçışı XSS'e karşı nasıl korunulur bölümünde daha ayrıntılı ele alıyoruz.
Latte şablonundan veritabanı sorgusu çalıştırılabilir mi?
Şablonlarda, programcının onlara aktardığı nesnelerle çalışabilirsiniz. Programcı isterse şablona bir veritabanı nesnesi aktarabilir ve onun üzerinde bir sorgu çalıştırabilir. Niyeti buysa, bunu engellemek için bir neden yoktur.
Müşterilere veya dış kodlayıcılara şablonları düzenleme olanağı vermek istediğinizde durum değişir. Bu durumda kesinlikle veritabanına erişmelerini istemezsiniz. Elbette veritabanı nesnesini şablona aktarmazsınız, ama ya başka bir nesne üzerinden erişilebiliyorsa? Çözüm, şablonlarda hangi metotların çağrılabileceğini tanımlamanızı sağlayan sandbox modudur. Bu sayede güvenlik ihlallerini dert etmeniz gerekmez.
Latte, Twig ve Blade gibi şablon sistemleri arasındaki başlıca farklar nelerdir?
Latte, Twig ve Blade gibi şablon sistemleri arasındaki farklar başlıca sözdizimlerinde, güvenliklerinde ve framework'lerle entegrasyonlarında yatar:
- Latte: PHP sözdizimini kullanır, bu da öğrenmeyi ve kullanmayı kolaylaştırır. Bağlama duyarlı kaçışla XSS saldırılarına karşı birinci sınıf koruma sağlar. Nette Framework ile iyi entegredir, ama tek başına da kullanılabilir.
- Twig: PHP'den belirgin biçimde farklı olan Python benzeri bir sözdizimi kullanır. Bağlam ayrımı yapmadan
kaçış uygular (temel
htmlspecialchars). Symfony framework'üyle iyi entegredir. - Blade: PHP ile kendi sözdiziminin bir karışımını kullanır. Bağlam ayrımı yapmadan kaçış uygular (temel
htmlspecialchars). Laravel'in özellikleri ve ekosistemiyle sıkı sıkıya entegredir.
Şirketlerin bir şablon sistemi kullanması buna değer mi?
Öncelikle, eğitimle, kullanımla ve genel yararlarla ilgili maliyetler sisteme göre belirgin biçimde değişir. Latte şablon sistemi, PHP sözdizimini kullanması sayesinde, bu dili zaten bilen programcılar için öğrenmeyi büyük ölçüde kolaylaştırır. Bir programcının Latte'yi yeterince tanıması genellikle yalnızca birkaç saat alır; bu da eğitim maliyetlerini düşürür, teknolojinin benimsenmesini ve en önemlisi günlük kullanımdaki verimliliği hızlandırır.
Ayrıca Latte, eşsiz bağlama duyarlı kaçış teknolojisi sayesinde XSS güvenlik açıklarına karşı yüksek düzeyde koruma sağlar. Bu koruma, web uygulamalarının güvenliğini sağlamak ve kullanıcıları veya şirket verilerini tehlikeye atabilecek saldırıların riskini en aza indirmek için çok önemlidir. Web uygulaması güvenliği, bir şirketin itibarını korumak açısından da önemlidir. Güvenlik sorunları müşteri güveninin kaybına ve şirketin pazardaki imajının zedelenmesine yol açabilir.
Latte kullanmak ayrıca geliştirmeyi ve bakımı kolaylaştırarak genel maliyetleri de düşürür. Bu yüzden bir şablon sistemi kullanmak kesinlikle buna değer.
Latte, web uygulamalarının performansını etkiler mi?
Latte şablonları hızlı işlense de, bu yön üretimde aslında önemli değildir. Bunun nedeni, şablon dosyalarının yalnızca ilk gösterildiklerinde bir kez ayrıştırılmasıdır. Sonra yerel PHP koduna derlenir, diske kaydedilir ve sonraki her istekte yeniden derlenmeye gerek kalmadan çalıştırılır.
Üretim ortamında böyle çalışır. Geliştirme sırasında ise Latte şablonları içerikleri her değiştiğinde yeniden derlenir, böylece geliştirici her zaman güncel sürümü görür.