Γιατί να χρησιμοποιήσετε πρότυπα;
- Γιατί πρέπει να χρησιμοποιήσω ένα σύστημα δημιουργίας προτύπων στην PHP;
- Γιατί το Latte είναι καλύτερο από το Twig ή το Blade;
- Τι είναι η διαφυγή;
- Μπορεί να εκτελεστεί ένα ερώτημα βάσης δεδομένων από ένα πρότυπο Latte;
- Ποιες είναι οι κύριες διαφορές μεταξύ συστημάτων template όπως το Latte, το Twig και το Blade;
- Αξίζει τον κόπο για τις εταιρείες να χρησιμοποιούν ένα σύστημα templating;
- Επηρεάζει το Latte την απόδοση των εφαρμογών ιστού;
Γιατί πρέπει να χρησιμοποιήσω ένα σύστημα δημιουργίας προτύπων στην PHP;
Γιατί να χρησιμοποιήσετε ένα σύστημα προτύπων στην PHP όταν η ίδια η PHP είναι μια γλώσσα δημιουργίας προτύπων;
Ας ανακεφαλαιώσουμε πρώτα εν συντομία την ιστορία αυτής της γλώσσας, η οποία είναι γεμάτη από ενδιαφέρουσες ανατροπές. Μια από τις πρώτες γλώσσες προγραμματισμού που χρησιμοποιήθηκαν για τη δημιουργία σελίδων HTML ήταν η γλώσσα C. Ωστόσο, σύντομα έγινε φανερό ότι η χρήση της για το σκοπό αυτό ήταν μη πρακτική. Έτσι, ο Rasmus Lerdorf δημιούργησε την PHP, η οποία διευκόλυνε τη δημιουργία δυναμικής HTML με τη γλώσσα C στο backend. Η PHP σχεδιάστηκε αρχικά ως γλώσσα δημιουργίας προτύπων, αλλά με την πάροδο του χρόνου απέκτησε πρόσθετα χαρακτηριστικά και έγινε μια ολοκληρωμένη γλώσσα προγραμματισμού.
Παρ' όλα αυτά, εξακολουθεί να λειτουργεί ως γλώσσα διαμόρφωσης
προτύπων. Ένα αρχείο PHP μπορεί να περιέχει μια σελίδα HTML, στην οποία οι
μεταβλητές εξάγονται χρησιμοποιώντας <?= $foo ?>
, κ.λπ.
Στις αρχές της ιστορίας της PHP, δημιουργήθηκε το σύστημα προτύπων Smarty, με σκοπό τον αυστηρό διαχωρισμό της εμφάνισης (HTML/CSS) από τη λογική της εφαρμογής. Σκόπιμα παρείχε μια πιο περιορισμένη γλώσσα από την ίδια την PHP, έτσι ώστε, για παράδειγμα, ένας προγραμματιστής να μην μπορεί να κάνει ένα ερώτημα στη βάση δεδομένων από ένα πρότυπο, κλπ. Από την άλλη πλευρά, αντιπροσώπευε μια πρόσθετη εξάρτηση στα έργα, αύξανε την πολυπλοκότητά τους και απαιτούσε από τους προγραμματιστές να μάθουν μια νέα γλώσσα Smarty. Τα οφέλη αυτά ήταν αμφιλεγόμενα και η απλή PHP συνέχισε να χρησιμοποιείται για τα πρότυπα.
Με την πάροδο του χρόνου, τα συστήματα προτύπων άρχισαν να γίνονται χρήσιμα. Εισήγαγαν έννοιες όπως η κληρονομικότητα, η λειτουργία sandbox και μια σειρά από άλλα χαρακτηριστικά που απλοποιούσαν σημαντικά τη δημιουργία προτύπων σε σύγκριση με την καθαρή PHP. Το θέμα της ασφάλειας, η ύπαρξη ευπαθειών όπως το XSS και η ανάγκη για escaping ήρθαν στο προσκήνιο. Τα συστήματα προτύπων εισήγαγαν την αυτόματη διαφυγή για να εξαλείψουν τον κίνδυνο να την ξεχάσει ένας προγραμματιστής και να δημιουργήσει ένα σοβαρό κενό ασφαλείας (θα δούμε σύντομα ότι αυτό έχει ορισμένες παγίδες).
Σήμερα, τα οφέλη των συστημάτων προτύπων υπερτερούν κατά πολύ του κόστους που συνδέεται με την ανάπτυξή τους. Ως εκ τούτου, έχει νόημα η χρήση τους.
Γιατί το Latte είναι καλύτερο από το Twig ή το Blade;
Υπάρχουν διάφοροι λόγοι – ορισμένοι είναι ευχάριστοι και άλλοι είναι εξαιρετικά χρήσιμοι. Το Latte είναι ένας συνδυασμός ευχάριστου και χρήσιμου.
Πρώτα, το ευχάριστο: Το Latte έχει την ίδια σύνταξη με την PHP. Η μόνη διαφορά
είναι στη σημειογραφία των ετικετών, προτιμώντας τα συντομότερα
{
και }
αντί των <?=
και ?>
. Αυτό σημαίνει
ότι δεν χρειάζεται να μάθετε μια νέα γλώσσα. Το κόστος εκπαίδευσης
είναι ελάχιστο. Το σημαντικότερο, κατά τη διάρκεια της ανάπτυξης, δεν
χρειάζεται να “αλλάζετε” συνεχώς μεταξύ της γλώσσας PHP και της
γλώσσας προτύπων, αφού και οι δύο είναι ίδιες. Αυτό συμβαίνει σε
αντίθεση με τα πρότυπα Twig, τα οποία χρησιμοποιούν τη γλώσσα Python,
αναγκάζοντας τον προγραμματιστή να εναλλάσσεται μεταξύ δύο
διαφορετικών γλωσσών.
Και τώρα για τον εξαιρετικά χρήσιμο λόγο: Όλα τα συστήματα
προτύπων, όπως το Twig, το Blade ή το Smarty, έχουν εξελιχθεί ώστε να
περιλαμβάνουν προστασία κατά του XSS με τη μορφή αυτόματης διαφυγής. Πιο συγκεκριμένα, την αυτόματη κλήση της
συνάρτησης htmlspecialchars()
. Ωστόσο, οι δημιουργοί του Latte
συνειδητοποίησαν ότι αυτή δεν είναι καθόλου η σωστή λύση. Αυτό
συμβαίνει επειδή διαφορετικά μέρη του εγγράφου απαιτούν διαφορετικές
μεθόδους διαφυγής. Η αφελής αυτόματη διαφυγή είναι ένα επικίνδυνο
χαρακτηριστικό, επειδή δημιουργεί μια ψευδή αίσθηση ασφάλειας.
Για να είναι λειτουργική και αξιόπιστη η αυτόματη απομάκρυνση, πρέπει να αναγνωρίζει πού στο έγγραφο εξάγονται τα δεδομένα (τα ονομάζουμε πλαίσια) και να επιλέγει τη λειτουργία απομάκρυνσης αναλόγως. Επομένως, πρέπει να είναι ευαίσθητη στα συμφραζόμενα. Και αυτό είναι που μπορεί να κάνει η Latte. Κατανοεί την HTML. Δεν αντιλαμβάνεται το πρότυπο ως μια απλή συμβολοσειρά χαρακτήρων, αλλά καταλαβαίνει τι είναι οι ετικέτες, τα χαρακτηριστικά κ.λπ. Ως εκ τούτου, αποφεύγει με διαφορετικό τρόπο το κείμενο HTML, μέσα σε ετικέτες HTML, μέσα σε JavaScript κ.λπ.
Το Latte είναι το πρώτο και μοναδικό σύστημα προτύπων PHP με διαφυγή με ευαισθησία περιβάλλοντος. Αποτελεί το μόνο πραγματικά ασφαλές σύστημα προτύπων.
Και ένας άλλος ευχάριστος λόγος: Επειδή το Latte καταλαβαίνει την HTML, προσφέρει και άλλα πολύ ευχάριστα χαρακτηριστικά. Για παράδειγμα, το n:attributes. Ή τη δυνατότητα ελέγχου των συνδέσμων. Και πολλά άλλα.
Τι είναι η διαφυγή;
Η διαφυγή είναι μια διαδικασία που περιλαμβάνει την αντικατάσταση
χαρακτήρων με ειδικές σημασίες με αντίστοιχες ακολουθίες κατά την
εισαγωγή μιας συμβολοσειράς σε μια άλλη για την αποφυγή ανεπιθύμητων
αποτελεσμάτων ή σφαλμάτων. Για παράδειγμα, κατά την εισαγωγή μιας
συμβολοσειράς σε κείμενο HTML, στην οποία ο χαρακτήρας <
έχει
ειδική σημασία επειδή υποδηλώνει την αρχή μιας ετικέτας, τον
αντικαθιστούμε με την αντίστοιχη ακολουθία, η οποία είναι η οντότητα
HTML <
. Αυτό επιτρέπει στο πρόγραμμα περιήγησης να εμφανίζει
σωστά το σύμβολο <
.
Ένα απλό παράδειγμα άμεσης διαφυγής κατά τη συγγραφή κώδικα PHP είναι η εισαγωγή ενός εισαγωγικού σήματος σε μια συμβολοσειρά τοποθετώντας μια backslash μπροστά του.
Συζητάμε το escaping με περισσότερες λεπτομέρειες στο κεφάλαιο Πώς να αμυνθείτε κατά του XSS.
Μπορεί να εκτελεστεί ένα ερώτημα βάσης δεδομένων από ένα πρότυπο Latte;
Στα πρότυπα, μπορείτε να εργάζεστε με αντικείμενα που τους περνάει ο προγραμματιστής. Αν ο προγραμματιστής το επιθυμεί, μπορεί να περάσει ένα αντικείμενο βάσης δεδομένων στο πρότυπο και να εκτελέσει ένα ερώτημα. Αν σκοπεύουν να το κάνουν, δεν υπάρχει λόγος να τους εμποδίσουμε.
Μια διαφορετική κατάσταση προκύπτει αν θέλετε να δώσετε σε πελάτες ή εξωτερικούς προγραμματιστές τη δυνατότητα να επεξεργάζονται πρότυπα. Σε αυτή την περίπτωση, σίγουρα δεν θέλετε να έχουν πρόσβαση στη βάση δεδομένων. Φυσικά, δεν θα περάσετε το αντικείμενο της βάσης δεδομένων στο πρότυπο, αλλά τι γίνεται αν μπορεί να γίνει πρόσβαση σε αυτό μέσω ενός άλλου αντικειμένου; Η λύση είναι η λειτουργία sandbox, η οποία σας επιτρέπει να ορίσετε ποιες μέθοδοι μπορούν να κληθούν στα πρότυπα. Χάρη σε αυτό, δεν χρειάζεται να ανησυχείτε για παραβιάσεις της ασφάλειας.
Ποιες είναι οι κύριες διαφορές μεταξύ συστημάτων template όπως το Latte, το Twig και το Blade;
Οι διαφορές μεταξύ συστημάτων διαμόρφωσης προτύπων όπως το Latte, το Twig και το Blade έγκεινται κυρίως στη σύνταξη, την ασφάλεια και την ενσωμάτωση με πλαίσια:
- Latte: χρησιμοποιεί σύνταξη της γλώσσας PHP, καθιστώντας την ευκολότερη στην εκμάθηση και τη χρήση. Παρέχει κορυφαία προστασία από επιθέσεις XSS.
- Twig: χρησιμοποιεί σύνταξη που μοιάζει με Python, η οποία είναι αρκετά διαφορετική από την PHP. Διαφεύγει χωρίς διάκριση πλαισίου. Είναι καλά ενσωματωμένο με το πλαίσιο Symfony.
- Blade: χρησιμοποιεί ένα μείγμα σύνταξης PHP και προσαρμοσμένης σύνταξης. Διαφεύγει χωρίς διάκριση πλαισίου. Είναι στενά ενσωματωμένο με τα χαρακτηριστικά και το οικοσύστημα του Laravel.
Αξίζει τον κόπο για τις εταιρείες να χρησιμοποιούν ένα σύστημα templating;
Πρώτον, το κόστος που σχετίζεται με την εκπαίδευση, τη χρήση και τα συνολικά οφέλη ποικίλλει σημαντικά ανάλογα με το σύστημα. Το σύστημα δημιουργίας προτύπων Latte, χάρη στη χρήση του συντακτικού της PHP, απλοποιεί σημαντικά την εκμάθηση για τους προγραμματιστές που είναι ήδη εξοικειωμένοι με αυτή τη γλώσσα. Συνήθως χρειάζονται λίγες ώρες για να εξοικειωθεί επαρκώς ένας προγραμματιστής με το Latte, μειώνοντας το κόστος εκπαίδευσης και επιταχύνοντας την υιοθέτηση της τεχνολογίας και, κυρίως, την αποτελεσματικότητα στην καθημερινή χρήση.
Επιπλέον, το Latte παρέχει υψηλό επίπεδο προστασίας από την ευπάθεια XSS χάρη στη μοναδική τεχνολογία διαφυγής με επίγνωση του περιβάλλοντος. Αυτή η προστασία είναι ζωτικής σημασίας για τη διασφάλιση της ασφάλειας των εφαρμογών ιστού και την ελαχιστοποίηση του κινδύνου επιθέσεων που θα μπορούσαν να θέσουν σε κίνδυνο τους χρήστες ή τα δεδομένα της εταιρείας. Η ασφάλεια εφαρμογών ιστού είναι επίσης σημαντική για τη διατήρηση της καλής φήμης μιας εταιρείας. Τα ζητήματα ασφάλειας μπορεί να οδηγήσουν σε απώλεια εμπιστοσύνης από τους πελάτες και να βλάψουν τη φήμη της εταιρείας στην αγορά.
Η χρήση του Latte μειώνει επίσης το συνολικό κόστος ανάπτυξης και συντήρησης, καθώς διευκολύνει και τα δύο. Επομένως, η χρήση ενός συστήματος template αξίζει σίγουρα τον κόπο.
Επηρεάζει το Latte την απόδοση των εφαρμογών ιστού;
Παρόλο που τα πρότυπα Latte επεξεργάζονται γρήγορα, αυτή η πτυχή δεν έχει πραγματικά σημασία. Ο λόγος είναι ότι η ανάλυση των αρχείων γίνεται μόνο μία φορά κατά την πρώτη εμφάνιση. Στη συνέχεια μεταγλωττίζονται σε κώδικα PHP, αποθηκεύονται στο δίσκο και εκτελούνται σε κάθε επόμενη αίτηση χωρίς να απαιτείται εκ νέου μεταγλώττιση.
Έτσι λειτουργεί σε ένα περιβάλλον παραγωγής. Κατά τη διάρκεια της ανάπτυξης, τα πρότυπα Latte μεταγλωττίζονται εκ νέου κάθε φορά που αλλάζει το περιεχόμενό τους, ώστε ο προγραμματιστής να βλέπει πάντα την τρέχουσα έκδοση.