Η πιο συνηθισμένη κρίσιμη ευπάθεια των ιστοσελίδων είναι το Cross-Site Scripting (XSS). Επιτρέπει σε έναν εισβολέα να εισάγει ένα κακόβουλο σενάριο σε μια ξένη σελίδα, το οποίο εκτελείται στον περιηγητή ενός ανυποψίαστου χρήστη. Μπορεί να τροποποιήσει τη σελίδα, να αποκτήσει ευαίσθητες πληροφορίες ή ακόμη και να κλέψει την ταυτότητα του χρήστη.
Τα συστήματα προτύπων αποτυγχάνουν στην άμυνα κατά του XSS. Το Latte είναι το μόνο σύστημα με αποτελεσματική άμυνα χάρη στο λεγόμενο context-sensitive escaping.
Όποιος θέλει έναν καλά ασφαλισμένο ιστότοπο, χρησιμοποιεί το Latte.
Κουίζ: Μπορείτε να αμυνθείτε από την ευπάθεια XSS;
Πηγή δεδομένων: Acunetix Web Vulnerability Report
Παράδειγμα αυτόματου escaping της μεταβλητής
$text
σε διάφορα πλαίσια (μπορείτε να
επεξεργαστείτε το παραπάνω πρότυπο):
{var $text = "O'Neill"} - σε κείμενο: <span>{$text}</span> - σε χαρακτηριστικό: <span title={$text}></span> - σε χαρακτηριστικό χωρίς εισαγωγικά: <span title={$text}></span> - σε JavaScript: <script>var = {$text}</script>
- σε κείμενο: <span>O'Neill</span> - σε χαρακτηριστικό: <span title='O'Neill'></span> - σε χαρακτηριστικό χωρίς εισαγωγικά: <span title="O'Neill"></span> - σε JavaScript: <script>var = "O'Neill"</script>
Δεν υπερβάλλουμε. Γνωρίζετε ήδη πραγματικά τη γλώσσα Latte. Ξέρετε ήδη πώς να γράφετε εκφράσεις σε αυτήν. Γράφονται ακριβώς όπως στην PHP. Έτσι, δεν χρειάζεται να σκέφτεστε πώς να γράψετε κάτι στο Latte. Δεν χρειάζεται να ψάχνετε στην τεκμηρίωση. Δεν χρειάζεται να μάθετε άλλη γλώσσα. Απλώς γράφετε όπως στην PHP. Περισσότερα για τη σύνταξη του Latte
<ul>
{foreach $users as $user}
<li>{$user->name}</li>
{/foreach}
</ul>
{if $post->status === Status::Published}
Read post
{elseif count($posts) > 0}
See other posts
{/if}
{$product?->getDiscount()}
{$foo[0] + strlen($bar[Bar::Const])}
{array_filter($nums, fn($n) => $n < 100)}
Το Latte βασίζεται στην PHP, ενώ το Twig
βασίζεται στην Python. Ένας σχεδιαστής στο Latte
δεν χρειάζεται να αλλάζει συνεχώς μεταξύ
δύο διαφορετικών συμβάσεων. Για παράδειγμα,
μεταξύ του for person in people
στα πρότυπα
και του foreach $people as $person
στην PHP. Δεν
χρειάζεται καν να σκέφτεται πού να
χρησιμοποιήσει το {% %}
και πού το
{{ }}
, επειδή το Latte έχει έναν οριοθέτη
{...}
.
Δοκιμάστε το εργαλείο μετατροπής προτύπων Twig σε Latte.
<ul>
{foreach $foo->items as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
<ul>
{% for item in foo.items %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
Οι χρήστες λατρεύουν αυτό το
χαρακτηριστικό. Το ονομάζουμε n:attributes.
Κάθε ζευγαρωτό tag, όπως το {if} … {/if}
,
που περιβάλλει ένα στοιχείο HTML, μπορεί να
γραφτεί ως το χαρακτηριστικό του n:if
.
Αυτό επιτυγχάνει μια πολύ οικονομική
σύνταξη. Τα χαρακτηριστικά μπορούν επίσης
να έχουν προθέματα inner-
και tag-
,
τότε η συμπεριφορά ισχύει για το εσωτερικό
του στοιχείου ή για τα αρχικά και τελικά tags
HTML αντίστοιχα. Περισσότερα για τα n-attributes
Χρησιμοποιώντας n:attributes:
<ul n:if="count($menu) > 1" class="menu">
<li n:foreach="$menu as $item">
<a n:tag-if="$item->href" href={$item->href}>
{$item->caption}
</a>
</li>
</ul>
Το ίδιο χωρίς αυτά:
{if count($menu) > 1}
<ul class="menu">
{foreach $menu as $item}
<li>
{if $item->href}<a href={$item->href}>{/if}
{$item->caption}
{if $item->href}</a>{/if}
</li>
{/foreach}
</ul>
{/if}
Το Latte έχει εγγενή υποστήριξη στο NetBeans και ένα εξαιρετικό plugin για το PhpStorm, το οποίο προτείνει tags, φίλτρα και κώδικα PHP.
Μείνετε πάντα ενήμεροι. Το Plugin για το Tracy ενημερώνει σε κάθε σελίδα ποια πρότυπα και ποιες μεταβλητές αποδίδονται.
Το Latte είναι ένα σύστημα προτύπων νέας γενιάς – κατανοεί τη γλώσσα HTML. Εκεί όπου άλλα συστήματα βλέπουν απλώς ένα σωρό χαρακτήρες, το Latte βλέπει στοιχεία HTML. Γι' αυτό έχει δύο εκπληκτικές λειτουργίες, όπως το context-aware escaping και τα n:attributes.
Πώς βλέπουν το πρότυπο τα Blade, Twig και άλλα συστήματα
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Πώς βλέπει το πρότυπο το Latte
<!DOCTYPE html>
<html>
<head>
<title>It's all about context</title>
<meta name="description" content={include description}>
</head>
<body>
<ul class="navigation">
{foreach $navigation as $item}
<li><a href={$item->link}>{$item->title}</a></li>
{/foreach}
</ul>
<script>
var appName = {$appName};
</script>
</body>
</html>
Οι εξελιγμένοι μηχανισμοί επαναχρησιμοποίησης και κληρονομικότητας των προτύπων αυξάνουν την παραγωγικότητά σας, καθώς κάθε πρότυπο περιέχει μόνο το μοναδικό του περιεχόμενο και τα επαναλαμβανόμενα στοιχεία και δομές επαναχρησιμοποιούνται.
Το Latte διαθέτει ένα θωρακισμένο καταφύγιο ακριβώς κάτω από το καπό. Ονομάζεται λειτουργία sandbox και απομονώνει πρότυπα από μη αξιόπιστες πηγές, όπως αυτά που επεξεργάζονται οι ίδιοι οι χρήστες. Τους παρέχει περιορισμένη πρόσβαση σε tags, φίλτρα, συναρτήσεις, μεθόδους, κ.λπ. Πώς λειτουργεί;
Το Latte μεταγλωττίζει τα πρότυπα σε βέλτιστο κώδικα PHP κατά το χρόνο εκτέλεσης. Έτσι, είναι εξίσου γρήγορο σαν να γράφατε καθαρή PHP. Ο μεταγλωττισμένος κώδικας είναι σαφής και μπορείτε εύκολα να τον αποσφαλματώσετε. Κάθε φορά που αλλάζει το πρότυπο, φυσικά, μεταγλωττίζεται ξανά.
Αναπτύσσουμε το Latte για πάνω από 18 χρόνια – και ο αριθμός συνεχίζει να αυξάνεται! Οι βιβλιοθήκες που παρέχουμε είναι επομένως πολύ ώριμες, σταθερές και ευρέως χρησιμοποιούμενες. Τους εμπιστεύονται πολλές παγκόσμιες εταιρείες και τροφοδοτούν πολλούς σημαντικούς ιστότοπους. Ποιος χρησιμοποιεί και εμπιστεύεται το Latte?
Οι αναγνώστες επαινούν την τεκμηρίωση για τη σαφήνεια και την πληρότητά της. Σας ευχόμαστε καλή ανάγνωση.
Το Latte είναι ανοιχτού κώδικα και μπορείτε να το χρησιμοποιήσετε εντελώς δωρεάν.
The first version of Latte 2 was released in 2014 as part of the then revolutionary splitting of the framework into a collection of standalone libraries. Version 3 of Latte, representing a major evolutionary leap was released just over a year ago.
How can you detect errors in templates in a timely manner? You have several methods at your disposal.