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