De ce să folosim șabloane?

De ce ar trebui să folosesc un sistem de șabloane în PHP?

De ce să folosiți un sistem de șabloane în PHP, când PHP este el însuși un limbaj de șabloane?

Să recapitulăm mai întâi pe scurt istoria acestui limbaj, care este plină de întorsături interesante. Unul dintre primele limbaje de programare utilizate pentru generarea paginilor HTML a fost limbajul C. Curând, însă, s-a dovedit că utilizarea sa în acest scop este nepractică. Rasmus Lerdorf a creat, prin urmare, PHP, care a facilitat generarea de HTML dinamic cu limbajul C în backend. PHP a fost, așadar, inițial conceput ca un limbaj de șabloane, dar în timp a dobândit funcții suplimentare și a devenit un limbaj de programare complet.

Cu toate acestea, funcționează în continuare și ca limbaj de șabloane. Într-un fișier PHP poate fi scrisă o pagină HTML, în care variabilele sunt afișate folosind <?= $foo ?> etc.

Încă de la începuturile istoriei PHP, a apărut sistemul de șabloane Smarty, al cărui scop era să separe strict aspectul (HTML/CSS) de logica aplicației. Adică, a oferit în mod intenționat un limbaj mai limitat decât PHP însuși, astfel încât dezvoltatorul să nu poată, de exemplu, să execute o interogare în baza de date dintr-un șablon etc. Pe de altă parte, a reprezentat o altă dependență în proiecte, a crescut complexitatea acestora, iar programatorii au trebuit să învețe noul limbaj Smarty. Un astfel de beneficiu a fost discutabil și s-a continuat utilizarea PHP simplu pentru șabloane.

În timp, sistemele de șabloane au început să devină utile. Au venit cu conceptul de moștenire, mod sandbox și o serie de alte funcții, care au simplificat semnificativ crearea șabloanelor în comparație cu PHP pur. În prim plan a ajuns tema securității, existența vulnerabilităților precum XSS și necesitatea escapării. Sistemele de șabloane au venit cu autoescapare, pentru a elimina riscul ca programatorul să uite de aceasta și să apară o gaură de securitate gravă (vom arăta în curând că acest lucru are anumite capcane).

Beneficiile sistemelor de șabloane depășesc astăzi în mod semnificativ costurile asociate cu implementarea lor. Prin urmare, are sens să le folosim.

De ce este Latte mai bun decât, de exemplu, Twig sau Blade?

Există mai multe motive – unele sunt plăcute, altele fundamental utile. Latte este o combinație între plăcut și util.

Mai întâi cel plăcut: Latte are aceeași sintaxă ca PHP. Diferă doar scrierea tag-urilor, în loc de <?= și ?> preferă { și } mai scurte. Asta înseamnă că nu trebuie să învățați un limbaj nou. Costurile de instruire sunt minime. Și, mai ales, în timpul dezvoltării nu trebuie să „comutați” constant între limbajul PHP și limbajul șablonului, deoarece ambele sunt la fel. Spre deosebire de șabloanele Twig, care folosesc limbajul Python, iar programatorul trebuie astfel să comute între două limbaje diferite.

Și acum motivul extrem de util: Toate sistemele de șabloane, precum Twig, Blade sau Smarty, au venit în cursul evoluției cu protecție împotriva XSS sub forma escapării automate. Mai precis, apelarea automată a funcției htmlspecialchars(). Creatorii Latte și-au dat seama însă că aceasta nu este deloc soluția corectă. Deoarece în diferite locuri ale documentului se escapează în moduri diferite. Autoescaparea naivă este o funcție periculoasă, deoarece creează un fals sentiment de securitate.

Pentru ca autoescaparea să fie funcțională și fiabilă, trebuie să recunoască în ce loc al documentului se afișează datele (le numim contexte) și, în funcție de acesta, să aleagă funcția de escapare. Adică trebuie să fie sensibilă la context. Și tocmai asta știe să facă Latte. Înțelege HTML. Nu percepe șablonul doar ca un șir de caractere, ci înțelege ce sunt tag-urile, atributele etc. Și de aceea escapează diferit în textul HTML, diferit în interiorul unui tag HTML, diferit în interiorul JavaScriptului etc.

Latte este primul și singurul sistem de șabloane în PHP care are escapare sensibilă la context. Reprezintă astfel singurul sistem de șabloane cu adevărat sigur.

Și încă un motiv plăcut: Datorită faptului că Latte înțelege HTML, oferă alte caracteristici foarte plăcute. De exemplu, n:atribute. Sau capacitatea de a verifica link-urile. Și multe altele.

Ce este escaparea?

Escaparea este procesul care constă în înlocuirea caracterelor cu semnificație specială cu secvențe corespunzătoare la inserarea unui șir în altul, pentru a preveni fenomene nedorite sau erori. De exemplu, când inserăm un șir într-un text HTML, în care caracterul < are o semnificație specială, deoarece indică începutul unui tag, îl înlocuim cu secvența corespunzătoare, care este entitatea HTML &lt;. Datorită acestui fapt, browserul va afișa corect simbolul <.

Un exemplu simplu de escapare direct la scrierea codului în PHP este inserarea unei ghilimele într-un șir, când scriem un backslash înaintea ei.

Discutăm mai detaliat escaparea în capitolul Cum să te aperi de XSS.

Se poate executa o interogare în baza de date dintr-un șablon în Latte?

În șabloane se poate lucra cu obiecte pe care programatorul le transmite. Dacă programatorul dorește, poate transmite șablonului un obiect de bază de date și poate executa o interogare asupra acestuia. Dacă are o astfel de intenție, nu există niciun motiv să i se interzică acest lucru.

O situație diferită apare dacă doriți să oferiți clienților sau coderilor externi posibilitatea de a edita șabloanele. În acest caz, cu siguranță nu doriți ca aceștia să aibă acces la baza de date. Desigur, nu veți transmite șablonului obiectul bazei de date, dar ce se întâmplă dacă se poate ajunge la el prin intermediul altui obiect? Soluția este modul sandbox, care permite definirea metodelor care pot fi apelate în șabloane. Datorită acestui fapt, nu trebuie să vă faceți griji cu privire la încălcarea securității.

Care sunt principalele diferențe între sistemele de șabloane precum Latte, Twig și Blade?

Diferențele dintre sistemele de șabloane Latte, Twig și Blade constau în principal în sintaxă, securitate și modul de integrare în framework-uri

  • Latte: folosește sintaxa limbajului PHP, ceea ce facilitează învățarea și utilizarea. Oferă protecție de top împotriva atacurilor XSS.
  • Twig: folosește sintaxa limbajului Python, care diferă destul de mult de PHP. Escapează fără a distinge contextul. Este bine integrat în framework-ul Symfony.
  • Blade: folosește un amestec de PHP și sintaxă proprie. Escapează fără a distinge contextul. Este strâns integrat cu funcțiile și ecosistemul Laravel.

Merită ca firmele să folosească un sistem de șabloane?

În primul rând, costurile asociate cu instruirea, utilizarea și beneficiul general diferă semnificativ în funcție de sistem. Sistemul de șabloane Latte, datorită faptului că folosește sintaxa PHP, simplifică foarte mult învățarea pentru programatorii deja familiarizați cu acest limbaj. De obicei, durează câteva ore până când un programator se familiarizează suficient cu Latte. Reduce astfel costurile de instruire. În același timp, accelerează adoptarea tehnologiei și, mai presus de toate, eficiența în utilizarea zilnică.

În plus, Latte oferă un nivel ridicat de protecție împotriva vulnerabilității XSS datorită tehnologiei unice de escapare sensibilă la context. Această protecție este crucială pentru asigurarea securității aplicațiilor web și minimizarea riscului de atacuri care ar putea pune în pericol utilizatorii sau datele companiei. Protejarea securității aplicațiilor web este importantă și pentru menținerea unei bune reputații a companiei. Problemele de securitate pot provoca pierderea încrederii din partea clienților și pot dăuna reputației companiei pe piață.

Utilizarea Latte reduce, de asemenea, costurile totale de dezvoltare și întreținere a aplicației, facilitând ambele. Utilizarea unui sistem de șabloane este, prin urmare, în mod clar rentabilă.

Afectează Latte performanța aplicațiilor web?

Deși șabloanele Latte sunt procesate rapid, acest aspect nu contează de fapt. Motivul este că parsarea fișierelor are loc o singură dată la prima afișare. Ulterior, acestea sunt compilate în cod PHP, stocate pe disc și executate la fiecare cerere ulterioară, fără a fi necesară recompilarea.

Acesta este modul de funcționare în mediul de producție. În timpul dezvoltării, șabloanele Latte sunt recompilate de fiecare dată când conținutul lor se modifică, astfel încât dezvoltatorul să vadă întotdeauna versiunea actuală.

versiune: 3.0