DedSec Project

Ασφαλής χειρισμός web inputs και εξόδου στο DOM — DedSec Project

Έλεγχος εισόδου και ασφαλής εμφάνιση είναι διαφορετικές δουλειές Δύο ξεχωριστές ευθύνες Το validation εξετάζει αν μία τιμή επιτρέπεται από τη λογική της εφαρμογής. Το output encoding…

Έλεγχος εισόδου και ασφαλής εμφάνιση είναι διαφορετικές δουλειές

Δύο ξεχωριστές ευθύνες

Το validation εξετάζει αν μία τιμή επιτρέπεται από τη λογική της εφαρμογής. Το output encoding εμποδίζει τον browser να ερμηνεύσει δεδομένα ως ενεργό HTML/JavaScript. Μια ποσότητα μπορεί να απαιτεί μη αρνητικό ακέραιο, ενώ μια ελεύθερη ετικέτα μπορεί να περιέχει ειδικούς χαρακτήρες. Το γενικό «κάνε escape παντού στην είσοδο» δεν αντικαθιστά τον σωστό χειρισμό στον τελικό προορισμό.

function acceptQuantity(value) {
  if (!Number.isInteger(value) || value < 0 || value > 9999)
    throw new RangeError('quantity out of range');
  return value;
}
const label = '<img src=x onerror=alert(1)>';
const target = document.createElement('span');
target.textContent = label; // απλό κείμενο, όχι HTML

Γιατί πρέπει να ξεχωρίζουμε το DOM API

Το textContent εμφανίζει συμβολοσειρά ως κείμενο. Το innerHTML προσπαθεί να την ερμηνεύσει ως markup και είναι επικίνδυνο με μη έμπιστη είσοδο. Στα URLs πρέπει να ελέγχεις scheme και προορισμό, όχι μόνο HTML escaping. Ένα JSON μπορεί να είναι συντακτικά σωστό αλλά να έχει λάθος keys και τύπους για τις ανάγκες της εφαρμογής.

Έλεγχος χωρίς εξωτερικό σύστημα

Σε δική σου σελίδα τοποθέτησε ένα span και επιβεβαίωσε ότι εμφανίζονται κυριολεκτικά τα angle brackets. Έπειτα εξέτασε acceptQuantity(0), acceptQuantity(-1) και acceptQuantity('4'). Μόνο ο μη αρνητικός ακέραιος πρέπει να γίνεται αποδεκτός. Η σιωπηλή μετατροπή string σε αριθμό δεν πρέπει να αποτελεί κρυφή επιχειρησιακή πολιτική.

Όριο του παραδείγματος

Ο χειρισμός κειμένου είναι μία άμυνα, όχι πλήρης λύση απέναντι σε XSS. Χρειάζονται σωστός renderer, έμπιστα dependencies, κατάλληλη CSP, έλεγχος εξωτερικών links και συνέπεια σε κάθε σημείο παραγωγής HTML.