Neden Şablon Kullanmalı?
- PHP'de Neden Bir Şablon Sistemi Kullanmalıyım?
- Neden Latte, Twig veya Blade'den Daha İyidir?
- Kaçış (Escaping) Nedir?
- Latte'de Şablondan Veritabanı Sorgusu Yapılabilir mi?
- Latte, Twig ve Blade Gibi Şablon Sistemleri Arasındaki Temel Farklar Nelerdir?
- Şirketler İçin Şablon Sistemi Kullanmak Mantıklı mı?
- Latte Web Uygulamalarının Performansını Etkiler mi?
PHP'de Neden Bir Şablon Sistemi Kullanmalıyım?
PHP kendisi bir şablon diliyken neden PHP'de bir şablon sistemi kullanmalıyım?
Öncelikle, ilginç dönemeçlerle dolu bu dilin tarihini kısaca özetleyelim. HTML sayfaları oluşturmak için kullanılan ilk programlama dillerinden biri C diliydi. Ancak kısa sürede bu amaçla kullanımının pratik olmadığı anlaşıldı. Bu nedenle Rasmus Lerdorf, arka uçta C dili ile dinamik HTML oluşturmayı kolaylaştıran PHP'yi yarattı. Dolayısıyla PHP başlangıçta bir şablon dili olarak tasarlanmıştı, ancak zamanla ek özellikler kazandı ve tam teşekküllü bir programlama dili haline geldi.
Yine de hala bir şablon dili olarak da çalışıyor. Bir PHP dosyasında, <?= $foo ?>
kullanılarak
değişkenlerin yazdırıldığı vb. bir HTML sayfası yazılabilir.
PHP tarihinin başlarında, görünümü (HTML/CSS) uygulama mantığından kesin olarak ayırma amacı taşıyan Smarty şablon sistemi ortaya çıktı. Yani, geliştiricinin örneğin bir şablondan veritabanı sorgusu yapmasını vb. engellemek için kasıtlı olarak PHP'nin kendisinden daha sınırlı bir dil sağladı. Öte yandan, projelerde ek bir bağımlılık oluşturdu, karmaşıklıklarını artırdı ve programcıların yeni bir Smarty dili öğrenmesi gerekiyordu. Böyle bir fayda tartışmalıydı ve şablonlar için basit PHP kullanılmaya devam edildi.
Zamanla şablon sistemleri kullanışlı hale gelmeye başladı. Saf PHP'ye kıyasla şablon oluşturmayı önemli ölçüde basitleştiren kalıtım, sandbox modu kavramı ve bir dizi başka özellikle geldiler. Güvenlik konusu, XSS gibi güvenlik açıkları'nın varlığı ve kaçış gerekliliği ön plana çıktı. Şablon sistemleri, programcının bunu unutması ve ciddi bir güvenlik açığı oluşması riskini ortadan kaldırmak için otomatik kaçış ile geldi (birazdan bunun bazı tuzakları olduğunu göstereceğiz).
Günümüzde şablon sistemlerinin faydaları, dağıtımlarıyla ilişkili maliyetleri önemli ölçüde aşmaktadır. Bu nedenle bunları kullanmak mantıklıdır.
Neden Latte, Twig veya Blade'den Daha İyidir?
Bunun birkaç nedeni var – bazıları hoş, bazıları ise temel olarak kullanışlı. Latte, hoş olanla kullanışlı olanın birleşimidir.
Önce hoş olan: Latte, PHP ile aynı
sözdizimine sahiptir. Yalnızca etiketlerin yazımı farklıdır, <?=
ve ?>
yerine daha kısa
olan {
ve }
tercih edilir. Bu, yeni bir dil öğrenmeniz gerekmediği anlamına gelir. Eğitim
maliyetleri minimumdur. Ve en önemlisi, geliştirme sırasında sürekli olarak PHP dili ile şablon dili arasında “geçiş
yapmak” zorunda kalmazsınız, çünkü ikisi de aynıdır. Python dilini kullanan Twig şablonlarının aksine, programcı iki
farklı dil arasında geçiş yapmak zorundadır.
Ve şimdi son derece kullanışlı neden: Twig, Blade veya Smarty gibi tüm şablon sistemleri, evrim sürecinde
otomatik kaçış şeklinde XSS'e karşı koruma ile geldi. Daha doğrusu,
htmlspecialchars()
fonksiyonunun otomatik çağrılması. Ancak Latte'nin yaratıcıları bunun hiç de doğru bir
çözüm olmadığını fark ettiler. Çünkü belgenin farklı yerlerinde farklı şekillerde kaçış yapılır. Saf otomatik
kaçış tehlikeli bir fonksiyondur, çünkü yanlış bir güvenlik hissi yaratır.
Otomatik kaçışın işlevsel ve güvenilir olması için, verilerin belgenin hangi bölümünde yazdırıldığını (bunlara bağlam diyoruz) tanıması ve buna göre kaçış fonksiyonunu seçmesi gerekir. Yani, bağlama duyarlı olmalıdır. Ve işte Latte bunu yapabilir. HTML'yi anlar. Şablonu yalnızca bir karakter dizisi olarak algılamaz, etiketlerin, niteliklerin vb. ne olduğunu anlar. Ve bu nedenle HTML metninde farklı, HTML etiketi içinde farklı, JavaScript içinde farklı vb. şekilde kaçış yapar.
Latte, PHP'de bağlama duyarlı kaçışa sahip ilk ve tek şablon sistemidir. Bu nedenle gerçekten güvenli tek şablon sistemini temsil eder.
Ve bir hoş neden daha: Latte'nin HTML'yi anlaması sayesinde, başka çok hoş özellikler sunar. Örneğin, n:nitelikleri. Veya bağlantıları kontrol etme yeteneği. Ve daha birçokları.
Kaçış (Escaping) Nedir?
Kaçış, istenmeyen olayları veya hataları önlemek için bir karakter dizisini diğerine eklerken özel anlamı olan
karakterleri karşılık gelen dizilerle değiştirme işlemidir. Örneğin, <
karakterinin özel bir anlamı
olduğu (etiketin başlangıcını belirttiği için) bir HTML metnine bir karakter dizisi eklediğimizde, onu karşılık gelen
diziyle, yani HTML varlığı <
ile değiştiririz. Bu sayede tarayıcı <
sembolünü doğru
şekilde görüntüler.
Doğrudan PHP'de kod yazarken kaçışın basit bir örneği, önüne ters eğik çizgi yazdığımız bir karakter dizisine tırnak işareti eklemektir.
Kaçışı XSS'e Karşı Nasıl Savunulur bölümünde daha ayrıntılı olarak ele alıyoruz.
Latte'de Şablondan Veritabanı Sorgusu Yapılabilir mi?
Şablonlarda, programcının onlara ilettiği nesnelerle çalışılabilir. Dolayısıyla, programcı isterse, şablona bir veritabanı nesnesi iletebilir ve üzerinde bir sorgu gerçekleştirebilir. Böyle bir niyeti varsa, onu engellemek için bir neden yoktur.
Şablonları müşterilere veya harici kodlayıcılara düzenleme imkanı vermek istediğinizde durum farklıdır. Bu durumda, kesinlikle veritabanına erişmelerini istemezsiniz. Elbette şablona veritabanı nesnesini iletmezsiniz, ancak ya başka bir nesne aracılığıyla erişilebilirse? Çözüm, şablonlarda hangi metotların çağrılabileceğini tanımlamanıza olanak tanıyan sandbox modu'dur. Bu sayede güvenlik ihlali konusunda endişelenmenize gerek kalmaz.
Latte, Twig ve Blade Gibi Şablon Sistemleri Arasındaki Temel Farklar Nelerdir?
Latte, Twig ve Blade şablon sistemleri arasındaki farklar temel olarak sözdizimi, güvenlik ve framework'lere entegrasyon şeklinde yatmaktadır
- Latte: PHP dilinin sözdizimini kullanır, bu da öğrenmeyi ve kullanmayı kolaylaştırır. XSS saldırılarına karşı birinci sınıf koruma sağlar.
- Twig: PHP'den oldukça farklı olan Python dilinin sözdizimini kullanır. Bağlamı ayırt etmeden kaçış yapar. Symfony framework'ü ile iyi entegre edilmiştir.
- Blade: PHP ve kendi sözdiziminin bir karışımını kullanır. Bağlamı ayırt etmeden kaçış yapar. Laravel fonksiyonları ve ekosistemi ile sıkı bir şekilde entegre edilmiştir.
Şirketler İçin Şablon Sistemi Kullanmak Mantıklı mı?
Öncelikle, eğitim, kullanım ve genel fayda ile ilişkili maliyetler sisteme göre önemli ölçüde farklılık gösterir. Latte şablon sistemi, PHP sözdizimini kullandığı için, bu dile zaten aşina olan programcılar için öğrenmeyi büyük ölçüde basitleştirir. Genellikle bir programcının Latte'yi yeterince tanıması birkaç saat sürer. Bu nedenle eğitim maliyetlerini düşürür. Aynı zamanda teknolojinin benimsenmesini ve özellikle günlük kullanımda verimliliği hızlandırır.
Ayrıca Latte, benzersiz bağlama duyarlı kaçış teknolojisi sayesinde XSS güvenlik açığı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ı riskini en aza indirmek için anahtardır. Web uygulamalarının güvenliğini korumak, şirketin iyi itibarını korumak için de önemlidir. Güvenlik sorunları, müşteriler tarafında güven kaybına neden olabilir ve şirketin pazardaki itibarını zedeleyebilir.
Latte kullanımı ayrıca, her ikisini de kolaylaştırarak uygulamanın genel geliştirme ve bakım maliyetlerini düşürür. Bu nedenle bir şablon sistemi kullanmak kesinlikle mantıklıdır.
Latte Web Uygulamalarının Performansını Etkiler mi?
Latte şablonları hızlı bir şekilde işlense de, bu yön aslında önemli değildir. Bunun nedeni, dosyaların ayrıştırılmasının yalnızca ilk görüntülemede bir kez gerçekleşmesidir. Ardından PHP koduna derlenirler, diske kaydedilirler ve her sonraki istekte yeniden derleme yapmaya gerek kalmadan çalıştırılırlar.
Bu, üretim ortamında çalışma şeklidir. Geliştirme sırasında, geliştiricinin her zaman güncel sürümü görmesi için Latte şablonları içerikleri her değiştiğinde yeniden derlenir.