Προστασία από ευπάθειες

Κάθε τόσο αναφέρεται μια τρύπα ασφαλείας σε έναν άλλο σημαντικό ιστότοπο ή γίνεται εκμετάλλευση μιας τρύπας. Αυτό είναι δυσάρεστο. Αν σας ενδιαφέρει η ασφάλεια των διαδικτυακών σας εφαρμογών, το Nette Framework είναι σίγουρα η καλύτερη επιλογή.

Cross-Site Scripting (XSS)

Το Cross-Site Scripting είναι μια μέθοδος παραβίασης ιστοσελίδων που εκμεταλλεύεται μη επεξεργασμένες εξόδους. Ο εισβολέας μπορεί στη συνέχεια να εισάγει τον δικό του κώδικα στη σελίδα και έτσι να την τροποποιήσει ή ακόμη και να αποκτήσει ευαίσθητα δεδομένα για τους επισκέπτες. Η άμυνα κατά του XSS είναι δυνατή μόνο με τη συνεπή και σωστή επεξεργασία όλων των strings. Και όμως, αρκεί ο κωδικοποιητής σας να το παραλείψει έστω και μία φορά, και ολόκληρος ο ιστότοπος μπορεί να διακυβευτεί αμέσως.

Ένα παράδειγμα επίθεσης μπορεί να είναι η εισαγωγή ενός τροποποιημένου URL στον χρήστη, μέσω του οποίου εισάγουμε τον δικό μας κώδικα στη σελίδα. Αν η εφαρμογή δεν επεξεργάζεται σωστά τις εξόδους, εκτελεί το script στον περιηγητή του χρήστη. Με αυτόν τον τρόπο μπορούμε, για παράδειγμα, να του κλέψουμε την ταυτότητα.

https://example.com/?search=<script>alert('Επιτυχής επίθεση XSS.');</script>

Το Nette Framework έρχεται με την επαναστατική τεχνολογία Context-Aware Escaping, η οποία σας απαλλάσσει για πάντα από τον κίνδυνο του Cross-Site Scripting. Επεξεργάζεται όλες τις εξόδους αυτόματα και έτσι δεν μπορεί να συμβεί ο κωδικοποιητής να ξεχάσει κάτι. Παράδειγμα; Ο κωδικοποιητής δημιουργεί αυτό το πρότυπο:

<p onclick="alert({$message})">{$message}</p>

<script>
document.title = {$message};
</script>

Η γραφή {$message} σημαίνει εκτύπωση της μεταβλητής. Σε άλλα frameworks, είναι απαραίτητο να επεξεργάζεστε ρητά κάθε εκτύπωση και μάλιστα διαφορετικά σε κάθε σημείο. Στο Nette Framework δεν χρειάζεται να επεξεργαστείτε τίποτα, όλα γίνονται αυτόματα, σωστά και με συνέπεια. Αν αντικαταστήσουμε στη μεταβλητή $message = 'Πλάτος 1/2"', το framework θα δημιουργήσει τον κώδικα HTML:

<p onclick="alert(&quot;Πλάτος 1\/2\&quot;&quot;)">Πλάτος 1/2&quot;</p>

<script>
document.title = "Πλάτος 1\/2\"";
</script>

Cross-Site Request Forgery (CSRF)

Η επίθεση Cross-Site Request Forgery συνίσταται στο ότι ο εισβολέας δελεάζει το θύμα σε μια σελίδα που εκτελεί διακριτικά ένα αίτημα στον διακομιστή στον οποίο είναι συνδεδεμένο το θύμα, στον περιηγητή του θύματος, και ο διακομιστής πιστεύει ότι το αίτημα εκτελέστηκε από το θύμα με τη θέλησή του. Και έτσι, υπό την ταυτότητα του θύματος, εκτελεί μια συγκεκριμένη ενέργεια χωρίς να το γνωρίζει. Μπορεί να είναι αλλαγή ή διαγραφή δεδομένων, αποστολή μηνύματος κ.λπ.

Το Nette Framework προστατεύει αυτόματα τις φόρμες και τα σήματα στους presenters από αυτόν τον τύπο επίθεσης. Και αυτό εμποδίζοντας την αποστολή ή την κλήση τους από άλλο domain. Αν θέλετε να απενεργοποιήσετε την προστασία, χρησιμοποιήστε στις φόρμες:

$form->allowCrossOrigin();

ή στην περίπτωση σήματος προσθέστε την annotation @crossOrigin:

/**
 * @crossOrigin
 */
public function handleXyz()
{
}

Στο Nette Application 3.2 μπορείτε να χρησιμοποιήσετε επίσης attributes:

use Nette\Application\Attributes\Requires;

#[Requires(sameOrigin: false)]
public function handleXyz()
{
}

Επίθεση URL, κωδικοί ελέγχου, μη έγκυρο UTF-8

Διάφοροι όροι που σχετίζονται με την προσπάθεια του εισβολέα να εισάγει στην διαδικτυακή σας εφαρμογή κακόβουλη είσοδο. Οι συνέπειες μπορεί να είναι πολύ διαφορετικές, από την καταστροφή των εξόδων XML (π.χ. μη λειτουργικά RSS feeds) μέχρι την απόκτηση ευαίσθητων πληροφοριών από τη βάση δεδομένων ή κωδικών πρόσβασης. Η άμυνα είναι η συνεπής επεξεργασία όλων των εισόδων σε επίπεδο μεμονωμένων bytes. Και με το χέρι στην καρδιά, ποιος από εσάς το κάνει αυτό;

Το Nette Framework το κάνει για εσάς και μάλιστα αυτόματα. Δεν χρειάζεται να ρυθμίσετε απολύτως τίποτα και όλες οι είσοδοι θα είναι επεξεργασμένες.

Session hijacking, session stealing, session fixation

Με τη διαχείριση των sessions συνδέονται αμέσως διάφοροι τύποι επιθέσεων. Ο εισβολέας είτε κλέβει είτε εισάγει στον χρήστη το δικό του session ID και χάρη σε αυτό αποκτά πρόσβαση στην διαδικτυακή εφαρμογή χωρίς να γνωρίζει τον κωδικό πρόσβασης του χρήστη. Στη συνέχεια μπορεί να κάνει οτιδήποτε στην εφαρμογή χωρίς να το γνωρίζει ο χρήστης. Η άμυνα συνίσταται στη σωστή διαμόρφωση του διακομιστή και της PHP.

Ενώ το Nette Framework διαμορφώνει την PHP αυτόματα. Ο προγραμματιστής έτσι δεν χρειάζεται να σκέφτεται πώς να ασφαλίσει σωστά το session και μπορεί να επικεντρωθεί πλήρως στη δημιουργία της εφαρμογής. Απαιτείται όμως η ενεργοποιημένη συνάρτηση ini_set().

Τα SameSite cookies παρέχουν έναν μηχανισμό για την αναγνώριση του τι οδήγησε στη φόρτωση της σελίδας. Κάτι που είναι απολύτως θεμελιώδες για την ασφάλεια.

Η σημαία SameSite μπορεί να έχει τρεις τιμές: Lax, Strict και None (αυτή απαιτεί HTTPS). Αν το αίτημα για τη σελίδα προέρχεται απευθείας από τον ιστότοπο ή ο χρήστης ανοίγει τη σελίδα πληκτρολογώντας απευθείας στη γραμμή διευθύνσεων ή κάνοντας κλικ σε έναν σελιδοδείκτη, ο περιηγητής στέλνει στον διακομιστή όλα τα cookies (δηλαδή με τις σημαίες Lax, Strict και None). Αν ο χρήστης μεταβεί στον ιστότοπο κάνοντας κλικ σε έναν σύνδεσμο από άλλο ιστότοπο, παραδίδονται στον διακομιστή τα cookies με τις σημαίες Lax και None. Αν το αίτημα προκύψει με άλλο τρόπο, όπως η υποβολή μιας φόρμας POST από άλλο ιστότοπο, η φόρτωση μέσα σε ένα iframe, με χρήση JavaScript, κ.λπ., αποστέλλονται μόνο τα cookies με τη σημαία None.

Το Nette από προεπιλογή στέλνει όλα τα cookies με τη σημαία Lax.

έκδοση: 4.0