window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster υπάρχει ήδη') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Ασφάλεια XSS σε δημοφιλείς βιβλιοθήκες Javascript. Θα πρέπει να ανησυχώ ακόμα; - The Codest
The Codest
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Βιομηχανίες
    • Fintech & Τραπεζική
    • E-commerce
    • Adtech
    • Healthtech
    • Κατασκευή
    • Εφοδιαστική
    • Αυτοκίνητο
    • IOT
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
Πίσω βέλος GO BACK
2019-08-26
Ανάπτυξη λογισμικού

Ασφάλεια XSS σε δημοφιλείς βιβλιοθήκες Javascript. Θα πρέπει να ανησυχώ ακόμα;

Daniel Grek

Πρέπει να παραδεχτούμε ότι όσον αφορά τις πιο δημοφιλείς βιβλιοθήκες Javascript, στην ιστορία της ανάπτυξής τους (9, 6 και 5 χρόνια για τις Angular, React και Vue, αντίστοιχα), συνέβησαν πολλά καλά πράγματα όσον αφορά την ασφάλεια, ειδικά όσον αφορά την ευπάθεια σε επιθέσεις XSS. Ωστόσο, αυτό το άρθρο θα συζητήσει τις μικρές παγίδες και τις αρχές που οι προγραμματιστές πρέπει ακόμα να γνωρίζουν.

XSS

Ζούμε στην εποχή των πλαισίων, όχι των γλωσσών. Αυτό συνεπάγεται ότι οι προγραμματιστές θα πρέπει να μπορούν να ανησυχούν λιγότερο για πολλές πτυχές της ανάπτυξης, συμπεριλαμβανομένης της ασφάλειας. Η πλειονότητα των σημερινών backend frameworks υλοποιεί ενότητες ασφαλείας, οι οποίες δοκιμάζονται από εξωτερικές, εξειδικευμένες εταιρείες και μεγάλες κοινωνίες. Ως εκ τούτου, μειωμένη ευαισθητοποίηση σε θέματα ασφάλειας θα μπορούσε να είναι εμφανής, για παράδειγμα μεταξύ των νέων προγραμματιστών, οι οποίοι αναλαμβάνουν μεγαλύτερη ευθύνη για τα προϊόντα, ιδίως όσον αφορά την ανεξάρτητη εργασία.

Μία από τις συνηθισμένες επιθέσεις στην πλευρά πελάτη της εφαρμογής είναι το XSS (Cross-Site Scripting). Πραγματοποιείται με την εισαγωγή εκτελέσιμων σεναρίων από την πλευρά του πελάτη σε διαδικτυακές εφαρμογές [1] και χρησιμοποιεί υλοποιημένες μεθόδους απόδοσης HTML ή Javascript κωδικός αξιολογητές που το εκτελούν. Το XSS είναι σχετικά επικερδές, καθώς μπορούν να συγκεντρωθούν πολλά διαφορετικά δεδομένα, όπως cookies συνεδρίας ή δεδομένα χρήστη, και μπορεί να εγκαταστήσει μια εφαρμογή παρακολούθησης, όπως ένα keylogger, καθιστώντας το επικίνδυνο τόσο για τους χρήστες όσο και για τους ιδιοκτήτες επιχειρήσεων. Μερικές φορές, πραγματοποιούνται και άλλες μορφές επίθεσης για να επιτραπεί το XSS στη σελίδα, όπως Έγχυση SQL.

Παράδειγμα

Η φόρμα σύνδεσης στη σελίδα εμφανίζει την παράμετρο loginName που αποστέλλεται στο πλαίσιο της αίτησης GET στην είσοδο ονόματος σύνδεσης. Η τιμή δεν επεξεργάζεται ούτε από τον διακομιστή ούτε από την πλευρά πελάτη της εφαρμογής. Με την αίτηση: http://localhost:8080/login?name=<script>alert(document.cookies)</script>
εκτελείται κώδικας και εκτίθενται δεδομένα

Αυτό είναι ένα παράδειγμα ενός ανακλώμενη επίθεση XSS, όπου τα σενάρια εισάγονται μέσω ειδικά προετοιμασμένης διεύθυνσης URL που υποβάλλεται στο θύμα και αντανακλάται από την απόκριση του διακομιστή. Άλλες γνωστές δημοφιλείς μορφές επιθέσεων είναι οι εξής:

  • Αποθηκευμένο XSS εκτελείται με δεδομένα που έχουν εισαχθεί και είναι αποθηκευμένα στην πλευρά του διακομιστή, συνήθως από φόρμες που είναι διαθέσιμες στην εφαρμογή. Η εφαρμογή-πελάτης αποδίδει κώδικα που είναι αποθηκευμένος, για παράδειγμα, σε μια βάση δεδομένων.
  • DOM XSS εκτελεί μια επίθεση XSS χωρίς χρήση της πλευράς διακομιστή. Στο επόμενο μέρος του άρθρου, θα επικεντρωθούμε σε αυτή τη μορφή επίθεσης.

Τρέχουσες ευπάθειες στις βιβλιοθήκες React και Vue

Για τις τρέχουσες εκδόσεις React/Vue, είχαν εντοπιστεί δύο σημαντικά προβλήματα που δεν έχουν ακόμη διορθωθεί επίσημα. Η πρώτη ευπάθεια έχει την ίδια φύση για κάθε πλαίσιο και σχετίζεται με μεθόδους που επιτρέπουν την απόδοση ακατέργαστης HTML μέσα σε πρότυπα: v-html και dangerouslySetInnerHTML, αντίστοιχα, για Vue και React. Κάθε τεκμηρίωση [2] ενημερώνει τους αναγνώστες ότι η μη συνετή χρήση μπορεί να εκθέσει τους χρήστες σε επίθεση XSS. Εάν δεν υπάρχουν άλλες επιλογές για την επίλυση του προβλήματος, βεβαιωθείτε ότι τα δεδομένα είναι φιλτραρισμένο και δραπέτευσε. Αν και είναι επικίνδυνες, δεν πρέπει να περιμένετε ότι αυτές οι μέθοδοι θα διορθωθούν. Χρησιμοποιήστε τις με δική σας ευθύνη.

Το πρώτο τρίμηνο του 2018, εντοπίστηκε ένα μεγάλο σφάλμα στο React, το οποίο επέτρεπε την άμεση εκτέλεση κώδικα με τον καθορισμό της ιδιότητας για το στοιχείο tag. Το πέρασμα κώδικα παραδείγματος μέσα σε ιδιότητες, όπως το javascript:alert(1) και εκτελώντας ένα σύνδεσμο που έχει αποδοθεί θα εκτελέσει τον κώδικα. Αυτό το θέμα [4] είναι ακόμα ανοιχτό και δεν έχει ετοιμαστεί και συγχωνευτεί καμία διόρθωση, οπότε βεβαιωθείτε ότι ο κώδικάς σας είναι ασφαλής. Τα παραδείγματα που προτείνονται στην επίσημη συζήτηση προτείνουν κάποιους τρόπους για να ξεπεραστεί αυτό το πρόβλημα.

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

  • παιδί κόμβος ένεση - React, χρήση του React.createElement [5]
  • απόδοση από την πλευρά του διακομιστή - React/Vue [6]
  • Έγχυση CSS [8]

Εξακολουθεί να αφορά τη Javascript. Εξακολουθεί να αφορά το front-end

Μην ξεχνάτε ότι, εκτός από τα ίδια τα πλαίσια ή τις βιβλιοθήκες, η Javascript ως γλώσσα έχει ορισμένες επικίνδυνες λειτουργίες, οι οποίες πρέπει να αποφεύγονται ή να χρησιμοποιούνται με προσοχή. Γενικά σχετίζονται με τον χειρισμό του DOM ή την εκτέλεση δέσμης ενεργειών. eval() αντιπροσωπεύει ναυαρχίδες αυτού του είδους και είναι εξαιρετικά επικίνδυνη, επειδή εκτελεί απευθείας δεδομένο αλφαριθμητικό κώδικα [9]. Επίσης, ρίξτε μια καλύτερη ματιά στον κώδικά σας όταν βρίσκετε μια από αυτές τις συναρτήσεις:

  • document.write
  • document.writeln
  • (element).innerHTML
  • (element).outerHTML
  • (element).insertAdjacentHTML

Εδώ, η χρήση πλειοδοτών με κατάλληλο σύνολο κανόνων μπορεί να βοηθήσει στην εύρεση τέτοιων ευάλωτων σημείων. Υπάρχουν επίσης πολλοί ανοιχτοί ή εμπορικοί αναλυτές κώδικα που μπορούν να σας βοηθήσουν να εντοπίσετε κενά ασφαλείας στον κώδικα που αναπτύσσεται.

Ανεξάρτητα από το ποια βιβλιοθήκη/πλαίσιο θα επιλεγεί, πρέπει να θυμόμαστε τις βασικές αρχές που σχετίζονται με την ανάπτυξη front-end. Πρώτον, βεβαιωθείτε πάντα ότι ο εξωτερικός κώδικας που εισάγετε προέρχεται από μια αξιόπιστη πηγή. Έλεγχος τις εξαρτήσεις σας και επιλέξτε τις με σύνεση. Ορισμένες μπορεί να περιέχουν σοβαρά τρωτά σημεία, εκθέτοντας τον κώδικά σας, ακόμη και αν όλα είναι εντάξει με τον ίδιο τον κώδικα. Μπορείτε να διαβάσετε περισσότερα για την ασφάλεια των εξαρτήσεων εδώ:

https://thecodest.co/blog/security-in-javascript-packages/

Οπότε... θα πρέπει να ανησυχείτε ακόμα;

Ναι - και ενθαρρύνω έντονα όλους να μην εμπιστεύονται ποτέ εξωτερικές βιβλιοθήκες ή τον εαυτό τους όσον αφορά την ασφάλεια. Ανεξάρτητα από το πόσο ασφαλές περιμένετε να είναι το λογισμικό σας, να κάνετε πάντα μια προσπάθεια να το δοκιμάζετε όσο το δυνατόν περισσότερο όσον αφορά τις συνήθεις μορφές επιθέσεων [10].

  1. https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml
  2. https://vuejs.org/v2/guide/syntax.html#Raw-HTML
  3. https://github.com/facebook/react/issues/12441
  4. http://danlec.com/blog/xss-via-a-spoofed-react-element
  5. https://medium.com/node-security/the-most-common-xss-vulnerability-in-react-js-applications-2bdffbcc1fa0
  6. https://github.com/dotboris/vuejs-serverside-template-xss
  7. https://frontarm.com/james-k-nelson/how-can-i-use-css-in-js-securely/
  8. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Do_not_ever_use_eval!

Διαβάστε περισσότερα:

5 λάθη που πρέπει να αποφύγετε κατά τη συντήρηση ενός έργου στο PHP

PHP Ανάπτυξη. Symfony Console Component - Συμβουλές και κόλπα

Γιατί χρειαζόμαστε το Symfony Polyfill (... και γιατί δεν θα έπρεπε)

Σχετικά άρθρα

Ανάπτυξη λογισμικού

Κατασκευάστε μελλοντικά ασφαλείς εφαρμογές Web: γνώσεις από την ομάδα εμπειρογνωμόνων του The Codest

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

THECODEST
Ανάπτυξη λογισμικού

Top 10 εταιρείες ανάπτυξης λογισμικού με έδρα τη Λετονία

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

thecodest
Λύσεις Enterprise & Scaleups

Βασικά στοιχεία ανάπτυξης λογισμικού Java: Α Guide to Outsourcing Successfully (Οδηγός για την επιτυχή εξωτερική ανάθεση)

Εξερευνήστε αυτόν τον βασικό οδηγό για την επιτυχή ανάπτυξη λογισμικού outsourcing Java για να αυξήσετε την αποδοτικότητα, να αποκτήσετε πρόσβαση στην τεχνογνωσία και να οδηγήσετε την επιτυχία των έργων με The Codest.

thecodest
Ανάπτυξη λογισμικού

Ο απόλυτος οδηγός για το Outsourcing στην Πολωνία

Η έξαρση της outsourcing στην Πολωνία οφείλεται στις οικονομικές, εκπαιδευτικές και τεχνολογικές εξελίξεις, που ευνοούν την ανάπτυξη της πληροφορικής και το φιλικό προς τις επιχειρήσεις κλίμα.

TheCodest
Λύσεις Enterprise & Scaleups

Ο πλήρης οδηγός εργαλείων και τεχνικών ελέγχου πληροφορικής

Οι έλεγχοι ΤΠ διασφαλίζουν ασφαλή, αποτελεσματικά και συμβατά συστήματα. Μάθετε περισσότερα για τη σημασία τους διαβάζοντας ολόκληρο το άρθρο.

The Codest
Jakub Jakubowicz CTO & Συνιδρυτής

Εγγραφείτε στη βάση γνώσεών μας και μείνετε ενήμεροι για την τεχνογνωσία από τον τομέα της πληροφορικής.

    Σχετικά με εμάς

    The Codest - Διεθνής εταιρεία ανάπτυξης λογισμικού με κέντρα τεχνολογίας στην Πολωνία.

    Ηνωμένο Βασίλειο - Έδρα

    • Γραφείο 303B, 182-184 High Street North E6 2JA
      Λονδίνο, Αγγλία

    Πολωνία - Τοπικοί κόμβοι τεχνολογίας

    • Πάρκο γραφείων Fabryczna, Aleja
      Pokoju 18, 31-564 Κρακοβία
    • Πρεσβεία του εγκεφάλου, Konstruktorska
      11, 02-673 Βαρσοβία, Πολωνία

      The Codest

    • Αρχική σελίδα
    • Σχετικά με εμάς
    • Υπηρεσίες
    • Case Studies
    • Μάθετε πώς
    • Καριέρα
    • Λεξικό

      Υπηρεσίες

    • Συμβουλευτική
    • Ανάπτυξη λογισμικού
    • Backend Ανάπτυξη
    • Ανάπτυξη Frontend
    • Staff Augmentation
    • Backend Developers
    • Μηχανικοί cloud
    • Μηχανικοί δεδομένων
    • Άλλα
    • Μηχανικοί QA

      Πόροι

    • Γεγονότα και μύθοι σχετικά με τη συνεργασία με εξωτερικό συνεργάτη ανάπτυξης λογισμικού
    • Από τις ΗΠΑ στην Ευρώπη: Γιατί οι αμερικανικές νεοσύστατες επιχειρήσεις αποφασίζουν να μετεγκατασταθούν στην Ευρώπη
    • Σύγκριση υπεράκτιων κόμβων ανάπτυξης τεχνολογίας: Ευρώπη (Πολωνία), ASEAN (Φιλιππίνες), Ευρασία (Τουρκία)
    • Ποιες είναι οι κορυφαίες προκλήσεις των CTOs και των CIOs;
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Πνευματικά δικαιώματα © 2025 από The Codest. Όλα τα δικαιώματα διατηρούνται.

    elGreek
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek