Πώς λειτουργεί η φορητότητα και η ασφάλεια WASM

Ελέγξτε πώς λειτουργούν τα μοντέλα φορητότητας και ασφάλειας WebAssembly (WASM) σε αυτόν τον οδηγό για αρχάριους.

Και τα δύο είναι προηγμένα θέματα WebAssembly (WASM). Σας συνιστούμε να διαβάσετε τα δύο προηγούμενα θέματα στη σειρά WebAssembly for Beginner.

Ας αρχίσουμε.

Φορητότητα WebAssembly

Η φορητότητα του WebAssembly το καθιστά έτοιμο για το Web. Στην πραγματικότητα, μπορείτε να ορίσετε το WASM ως μια φορητή πλατφόρμα sandbox.

Επιπλέον, η δυαδική του μορφή του επιτρέπει να εκτελεί σε διάφορες αρχιτεκτονικές συνόλων εντολών και λειτουργικά συστήματα. Αυτό σημαίνει ότι μπορείτε να χρησιμοποιήσετε το WASM όχι μόνο στο Web αλλά και εκτός Web.

Για να κατανοήσουμε τη φορητότητα WASM, θα συζητήσουμε τα εξής:

  • Τοπικό, περιορισμένο και μη ντετερμινιστικό περιβάλλον.
  • Ειδικά χαρακτηριστικά περιβάλλοντος εκτέλεσης
  • Φορητότητα WASM web και μη

Τοπικό, περιορισμένο και μη ντετερμινιστικό

Το WASM χρειάζεται αποτελεσματική εκτέλεση και κατάλληλα περιβάλλοντα που είναι τοπικά, περιορισμένα και μη ντετερμινιστικά. Ο μη ντετερμινισμός είναι ο υπολογισμός που προσδιορίζει ότι ένας αλγόριθμος/μεταγλωττιστής/περιβάλλον εξάγει διαφορετικές συμπεριφορές ή αποτελέσματα ακόμη και για την ίδια είσοδο. Είναι το αντίθετο ενός ντετερμινιστικού αλγόριθμου.

Οι δύο άλλες πτυχές, περιορισμένη και τοπική, συνδέονται με μη ντετερμινιστική εκτέλεση. Για να λειτουργήσει η μη ντετερμινιστική εκτέλεση, χρειάζεστε σαφώς καθορισμένες περιπτώσεις χρήσης που είναι «περιορισμένες».

Επίσης, αυτές οι εκτελέσεις είναι «τοπικές» χωρίς επιπτώσεις εκτός περιβάλλοντος. Διαβάστε τον επίσημο μη ντετερμινισμό τους στο έγγραφο WebAssembly για να μάθετε περισσότερα σχετικά με αυτό.

Ειδικά Χαρακτηριστικά Περιβάλλοντος Εκτέλεσης

Για να γίνει το WebAssembly φορητό, προϋποθέτει ότι το περιβάλλον εκτέλεσης προσφέρει τα ακόλουθα χαρακτηριστικά:

  • Δυνατότητα διεύθυνσης αναλυτικότητας μνήμης byte και byte 8 bit.
  • Συμπληρωματικοί ακέραιοι 32-bit δύο. Προαιρετικά 64 bit.
  • Η εξομοίωση λογισμικού είναι δυνατή μέσω μη ευθυγραμμισμένων προσβάσεων στη μνήμη ή αξιόπιστης παγίδευσης.
  • Υποστήριξη για κινητή σημεία 32-bit και 64-bit όπως ορίζεται στο IEEE 754-2008.
  • Εγγύηση για την εκτέλεση όλων των νημάτων με πρόοδο προς τα εμπρός.
  • Για πρόσβαση 64 bit, το wasm64 θα πρέπει να παρέχει τελεστές ατομικής μνήμης χωρίς κλείδωμα.
  • Οι τελεστές ατομικής μνήμης χωρίς κλείδωμα περιλαμβάνουν προσβάσεις 8, 16 και 32 bit.
  • Το wasm64 υποστηρίζει γραμμική μνήμη μεγαλύτερη από 4 GiB με δείκτες ή δείκτες 64 bit.
  • Παραγγελία byte σε μικρή κλίμακα.
  22 Καλύτερες Γεννήτριες Ψεύτικων Διευθύνσεων Email

Όλα τα μεγάλα προγράμματα περιήγησης, συμπεριλαμβανομένων των Chrome, Edge, Firefox και WebKit, υποστηρίζουν όλες αυτές τις περιβαλλοντικές απαιτήσεις.

Επιπλέον, το WebAssembly εξελίσσεται με γρήγορους ρυθμούς. Η κοινοτική ομάδα WASM και η ομάδα εργασίας W3C WebAssembly εργάζονται για την τυποποίησή της. Αυτό σημαίνει ότι οποιαδήποτε από αυτές τις απαιτήσεις μπορεί να αλλάξει στο μέλλον.

Φορητότητα WASM Web και Non-Web

Ο πρωταρχικός σκοπός του WebAssembly είναι να παρέχει φορητότητα και εγγενή απόδοση στον Ιστό και στον Ιστό. Σε αυτήν την ενότητα, θα δούμε πώς το επιτυγχάνει το WASM.

#1. Ενσωμάτωση Ιστού

Το WASM ενσωματώνεται καλά με το οικοσύστημα Ιστού, συμπεριλαμβανομένου του μοντέλου ασφαλείας του Ιστού, της φορητότητας Ιστού και των API Ιστού. Επιπλέον, πρέπει να έχει αρκετό χώρο για δημιουργική ανάπτυξη στο δρόμο (διαβάστε το WebAssembly για αρχάριους – Μέρος 2 για να κατανοήσετε τους στόχους του)

Πώς, λοιπόν, το WASM επιτυγχάνει συμβατότητα με τον Ιστό; Χρησιμοποιεί JavaScript API, επιτρέποντας στους προγραμματιστές να χρησιμοποιούν εύκολα τη συλλογή λειτουργιών JavaScript για WebAssembly. Φροντίζει επίσης για την αποθήκευση και την ανάκτηση μονάδων μεταγλωττιστή, τη διαχείριση εισαγωγών από μονάδες μεταγλωττιστή, τη διαχείριση της μνήμης κ.λπ.

Για να μάθετε περισσότερα σχετικά με το πώς το WASM επιτυγχάνει συμβατότητα Web υψηλού επιπέδου, διαβάστε αυτό: Ενσωμάτωση Web – WebAssembly.

#2. Ενσωμάτωση εκτός Ιστού

Όπως αναφέρθηκε προηγουμένως, το WASM λειτουργεί επίσης με περιβάλλοντα εκτός Ιστού. Ως προγραμματιστής ή επιχείρηση, μπορείτε να δημιουργήσετε εφαρμογές υψηλής απόδοσης ή να γράψετε ενότητες της εφαρμογής σας που χρειάζονται ρύθμιση απόδοσης. Για παράδειγμα, μπορείτε να το χρησιμοποιήσετε σε συσκευές IoT, διακομιστές κέντρων δεδομένων και εφαρμογές για υπολογιστές/κινητά.

Καθώς οι εφαρμογές εκτός ιστού δεν μπορούν να χρησιμοποιήσουν web API, βασίζονται στη δυναμική σύνδεση του WASM. Πρέπει επίσης να χρησιμοποιήσετε τη δοκιμή δυνατοτήτων, μια διαδικασία ανάπτυξης λογισμικού που δοκιμάζει τις πολλαπλές παραλλαγές των λειτουργιών για να δείτε τι είναι καλύτερο για την εμπειρία χρήστη. Επιπλέον, οι προγραμματιστές μπορούν να χρησιμοποιήσουν JavaScript VM για να απλοποιήσουν την ενσωμάτωση εκτός ιστού ή να αναπτύξουν τις εφαρμογές τους χωρίς αυτήν.

Για να μάθετε περισσότερα, διαβάστε την ενότητα Ενσωματώσεις εκτός ιστού – WebAssembly.

Ασφάλεια WebAssembly

Το WebAssembly είναι μια λύση δυαδικής μορφής που προσφέρει απόδοση που μοιάζει με εγγενή. Λειτουργεί εξαιρετικά στον Ιστό, αλλά μπορεί επίσης να ρυθμιστεί με ακρίβεια για να λειτουργεί σε ενσωματώσεις εκτός ιστού. Αυτό καθιστά το WASM ευρέως διαθέσιμο σε υπηρεσίες, λύσεις και διαδικασίες. Ωστόσο, αυτό σημαίνει περισσότερες προκλήσεις ασφάλειας.

  Διορθώστε το σφάλμα Snap Camera No Available Camera Input Error

Προκλήσεις και κίνδυνοι ασφάλειας WASM

Παρόλο που το WebAssembly θεωρείται ασφαλές και αποτελεσματικό, συνοδεύεται από πολλούς κινδύνους ασφαλείας, όπως:

  • WebAssembly sandbox
  • Διαχείριση μνήμης
  • Συσκότιση κώδικα
  • Έλεγχοι ακεραιότητας

#1. WebAssembly Sandbox

Το WASM εκτελείται εντός του προγράμματος περιήγησης Ιστού, όπως ακριβώς και η JavaScript. Χρησιμοποιεί την ίδια εικονική μηχανή (VM) με την JavaScript. Το sandbox παρέχει αποτελεσματικά ένα ασφαλές περιβάλλον εκτέλεσης και εμποδίζει το τι τρέχει κάτω από την κουκούλα.

Έτσι, εάν ο κώδικας JavaScript/WebAssembly περιέχει κακόβουλο κώδικα, είναι δύσκολο να εντοπιστεί καθώς πρόκειται για μαύρο κουτί. Επίσης, ο κώδικας WASM είναι σε δυαδική μορφή έτοιμη προς εκτέλεση. τρέχει πιο γρήγορα, καθιστώντας δύσκολο για τις λύσεις προστασίας από ιούς να αναζητήσουν κακόβουλο κώδικα. Για παράδειγμα, ο κώδικας μπορεί να περιέχει ανεπιθύμητες διαφημίσεις ή τη δυνατότητα ανακατεύθυνσης των χρηστών σε ανεπιθύμητους ιστότοπους κακόβουλου λογισμικού.

Επιπλέον, η υπερβολική εξάρτηση του WebAssembly στο JavaScript για εκτέλεση στον Ιστό σημαίνει επίσης ότι κληρονομεί ευπάθειες JavaScript. Γι’ αυτό, ως προγραμματιστής, πρέπει να ακολουθείτε τις προφυλάξεις και τα μέτρα ασφαλείας της JavaScript κατά την κωδικοποίηση του WASM.

#2. Διαχείριση μνήμης

Η διαχείριση μνήμης στο WASM είναι δύσκολη. Πρώτον, δεν έχει άμεση πρόσβαση στη φυσική μνήμη καθώς εκτελείται μέσα σε VM. Γι’ αυτό χρησιμοποιεί τη μνήμη του κεντρικού υπολογιστή.

Δεύτερον, ο καθαρισμός της μνήμης στο WASM απαιτεί μια ρητή διαδικασία, ενώ, σε σύγκριση, η JavaScript καθαρίζεται από μόνη της.

Επιπλέον, όταν μια συνάρτηση WASM επιστρέφει έξοδο σε JavaScript, επιστρέφει έναν δείκτη στη θέση εντός του εκχωρημένου χώρου μνήμης WASM. Έτσι, εάν η δηλωμένη μνήμη γεμίσει, το πρόγραμμα WASM μπορεί να διακοπεί, καταστρέφοντας την εμπειρία του χρήστη. Για να το αποτρέψουν, οι προγραμματιστές πρέπει να χρησιμοποιούν απολυμαντικά για τον εντοπισμό σφαλμάτων του κώδικά τους ή να χρησιμοποιούν αλυσίδες εργαλείων όπως το emscripten.

#3. Συσκότιση κώδικα

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

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

  Πώς να ορίσετε περιορισμούς περιεχομένου στο Xbox One

#4. Έλεγχοι ακεραιότητας

Οποιαδήποτε δεδομένα μεταφέρονται μέσω του Ιστού είναι ευάλωτα σε μετριασμό δεδομένων. Για παράδειγμα, οι χάκερ μπορούν να εκτελέσουν μια επίθεση man-in-the-middle για να αλλάξουν τις τιμές δεδομένων. Είναι ένα ζήτημα για το WASM, δεδομένου ότι δεν έχει κατάλληλο τρόπο να κάνει ελέγχους ακεραιότητας.

Ωστόσο, μπορεί να λειτουργήσει με JavaScript για την εκτέλεση ελέγχων ακεραιότητας. Ένας άλλος τρόπος για τον εντοπισμό πιθανών τρωτών σημείων του κώδικα WASM είναι η χρήση εργαλείων ενοποίησης όπως το Jit. Διασφαλίζει ότι ο κώδικας είναι απαλλαγμένος από κακούς παράγοντες και δεν μπορεί να επηρεάσει τις εφαρμογές ή τις γύρω υποδομές cloud.

Κατανόηση του μοντέλου ασφαλείας WASM

Το WebAssembly λαμβάνει σοβαρά υπόψη την ασφάλεια. Γι’ αυτό, στα επίσημα έγγραφα WASM, ανέφεραν ότι το μοντέλο ασφαλείας τους φροντίζει για δύο σημαντικούς στόχους:

  • Βεβαιωθείτε ότι κανένα buggy ή κακόβουλο module δεν επηρεάζει τους χρήστες
  • Βεβαιωθείτε ότι οι προγραμματιστές μπορούν να μετριάσουν τυχόν κινδύνους ασφαλείας και να δημιουργήσουν ασφαλείς εφαρμογές, διασφαλίζοντας παράλληλα ότι το σημείο 1 διατηρείται πάντα.
  • Το μοντέλο ασφαλείας WASM γνωρίζει ότι οι εφαρμογές WebAssembly εκτελούνται ανεξάρτητα, ενώ δεν μπορούν να ξεφύγουν από το περιβάλλον του sandbox. Ωστόσο, τα API μπορούν να ανοίξουν έναν τρόπο επίθεσης στο περιβάλλον του κεντρικού υπολογιστή.

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

    Για να βελτιωθεί η ασφάλεια, οι προγραμματιστές θα πρέπει να επιβάλλουν την πολιτική ίδιας προέλευσης για τη ροή πληροφοριών. Αν αναπτύσσετε για μη web, πρέπει να χρησιμοποιήσετε το μοντέλο ασφαλείας POSIX. Αν θέλετε να διαβάσετε περισσότερα για το μοντέλο ασφαλείας του, ρίξτε μια ματιά στο: Security – WebAssembly.

    Η διεπαφή συστήματος WebAssembly (WASI)

    Το WASI (The WebAssembly System Interface) διαδραματίζει επίσης κρίσιμο ρόλο στην ενσωμάτωση εκτός ιστού WASM, καθώς βελτιώνει την ασφάλεια. Είναι μια αρθρωτή διεπαφή συστήματος που προσφέρει συναρπαστικά χαρακτηριστικά ασφαλείας και φορητότητα.

    Στην πραγματικότητα, αποτελεί πλέον μέρος του Καταστατικού της Υποομάδας Διασύνδεσης Συστήματος WebAssembly και ως εκ τούτου είναι τυποποιημένο. Λόγω του WASI, το WASM υιοθετείται ευρέως σε διαφορετικούς τομείς υπολογιστών άκρων/διακομιστών. Επίσης, το WASI απλοποιεί την ασφάλεια κατά τη μετάβαση σε ενσωμάτωση εκτός ιστού από περιβάλλον ενσωμάτωσης ιστού.

    Τελικές Λέξεις

    Η φορητότητα και η ασφάλεια του WebAssembly είναι δύο μεγάλα θέματα. Στο μέρος 3 του WebAssembly για αρχάριους, προσπαθήσαμε να το απλοποιήσουμε και να το αναλύσουμε, ειδικά για αρχάριους.

    Στη συνέχεια, μπορείτε να ελέγξετε τα φύλλα εξαπάτησης JavaScript για προγραμματιστές και μαθητές.