Note: I'm using Zend Framework, but I think most of this applies to PHP coding in general.
Ben belki bir çiftleşmiş motoru yardımı ile, görünümleri komut dosyaları yazmak için bir strateji seçmek için çalışıyorum. Motivasyonları: clarity ve security. Ben sadece yazı ile mutlu değilim. Phtml komut. Bu sözdizimi en sık ihtiyaç duyulan bir şey yapmak için çok ayrıntılı - bir değişken çıkarılırken:
<?php echo $this->escape($this->myVariable); ?>
Kod uzun olmasının yanı sıra, şablon yazar IMHO hatırlamak zorunda (ve rahatsız) bir kaçış çağrıma o / o çıkış için bir değişken istediği her zaman yazılı olmamalıdır. Aramayı unutmak neredeyse kesinlikle bir XSS güvenlik açığına neden olur.
Ben bu sorunun iki olası çözümler var:
Solution 1: A template engine with automatic escaping
Ben en az Smarty değişkenleri çıktısı otomatik olarak html varlıkları kaçmak için bir seçenek olduğunu düşünüyorum. Orada points against Smarty, ama belki bunların en azından bazı yaklaşan 3,0 değinilen - Ben henüz bakmadım.
Gibi XML tabanlı motor şablonu PHPTAL varsayılan olarak herhangi bir veri kaçış olacaktır. Onlar olsa da, yeni başlayanlar için oldukça tuhaf görünebilir. Belki hala değer mi çalışıyorsun?
Solution 2: Escape the data in the Model
Tabii ki, diğer seçenek Modeli zaten gerekli veri kaçmayı olacaktır (hatta denetleyicisi?). Model zaten her alanın içerik türünü (özellikle düz metin veya HTML metin) bilmeli, bu yüzden bu tür mantıksal orada verileri kaçmak olacaktır. Görünümü güvenli HTML olarak tüm verileri düşünebiliriz. Bu örneğin sağlayacak. görünümü senaryoyu dokunmadan HTML, düz metin bir alanın veri türünü değiştirme - yalnızca Modeli değiştirerek.
Ama sonra tekrar, iyi MVC uygulama gibi gelmiyor. Buna ek olarak, hem de bu yaklaşımla sorunlar vardır:
- bazen görünüm yalnızca ilk n karakterini yazdırmak istiyor ve biz
foo & bar
verileri kesiliyor bitirmek istemiyorumfoo &am
(ilk olarak kaçan gibi {[(2) ]}) - belki görünümü sorgu dizesi içinde varName = $ varName ile bir URL oluşturmak istiyor - Tekrar, Model zaten kaçış kötü olurdu.
(Bu sorunlar. Verilerin iki sürümlerini sağlıyorsanız, veya şablonda atlanmaması tarafından ele bana kötü görünüyor olabilir.)
Fikirler? Ben bir şey eksik? Eğer "en iyi uygulama" Ne düşünüyorsunuz?
PS. Bu mesaj <
veya >
veya herhangi diğer karakterleri içerebilir herhangi bir kullanıcı tarafından sağlanan düz metin veri için genel bir çözüm bulmak. Yani, veritabanına kaydetmeden önce verileri filtreleme çözüm değildir.
Update:
Kadar tüm yorumlar için teşekkürler. Ben biraz daha araştırma yaptım ve sonraki Twig ve muhtemelen Open Power Template değerlendirecektir. Her ikisi de ilginç görünüyor: budak çok basit görünüyor, ama proje genç. XML tarafta, OPT sözdizimi PHPTAL en biraz daha güzel görünüyor. Dal ve OPT her ikisi de oldukça iyi belgelenmiştir.