Οδηγός ασφάλειας υπηρεσίας Web (WS) με παράδειγμα σαπουνιού

Πίνακας περιεχομένων:

Anonim

Τι είναι το WS Security;

Το WS Security είναι ένα πρότυπο που αντιμετωπίζει την ασφάλεια κατά την ανταλλαγή δεδομένων ως μέρος μιας υπηρεσίας Web. Αυτό είναι ένα βασικό χαρακτηριστικό στο SOAP που το καθιστά πολύ δημοφιλές για τη δημιουργία υπηρεσιών Ιστού.

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

Σε αυτό το σεμινάριο, θα μάθετε-

  • Απειλές και αντίμετρα ασφαλείας
  • Πρότυπα ασφάλειας υπηρεσίας Ιστού
  • Πώς να δημιουργήσετε ασφαλείς υπηρεσίες Ιστού
  • Βέλτιστες πρακτικές ασφάλειας υπηρεσιών Web

Απειλές και αντίμετρα ασφαλείας

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

Ένα από τα διαθέσιμα μέτρα ασφαλείας για το HTTP είναι το πρωτόκολλο HTTPS. Το HTTPS είναι ο ασφαλής τρόπος επικοινωνίας μεταξύ του πελάτη και του διακομιστή μέσω του διαδικτύου. Το HTTPS χρησιμοποιεί το επίπεδο Secure Sockets ή SSL για ασφαλή επικοινωνία. Τόσο ο πελάτης όσο και ο διακομιστής θα έχουν ένα ψηφιακό πιστοποιητικό για να αναγνωριστούν ως γνήσιοι όταν πραγματοποιηθεί οποιαδήποτε επικοινωνία μεταξύ του πελάτη και του διακομιστή.

Σε μια τυπική επικοινωνία HTTPS μεταξύ του πελάτη και του διακομιστή, πραγματοποιούνται τα ακόλουθα βήματα

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

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

Αυτό είναι όπου το SOAP έρχεται σε δράση για να ξεπεράσει αυτά τα εμπόδια, εφαρμόζοντας τις προδιαγραφές WS Security. Με αυτήν την προδιαγραφή, όλα τα δεδομένα που σχετίζονται με την ασφάλεια ορίζονται στο στοιχείο κεφαλίδας SOAP.

Το στοιχείο κεφαλίδας μπορεί να περιέχει τις παρακάτω πληροφορίες

  1. Εάν το μήνυμα εντός του σώματος SOAP έχει υπογραφεί με οποιοδήποτε κλειδί ασφαλείας, αυτό το κλειδί μπορεί να οριστεί στο στοιχείο κεφαλίδας.
  2. Εάν κάποιο στοιχείο εντός του σώματος SOAP είναι κρυπτογραφημένο, η κεφαλίδα θα περιέχει τα απαραίτητα κλειδιά κρυπτογράφησης έτσι ώστε το μήνυμα να μπορεί να αποκρυπτογραφηθεί όταν φτάσει στον προορισμό.

Σε πολλά περιβάλλοντα διακομιστή, η παραπάνω τεχνική ελέγχου ταυτότητας SOAP βοηθά με τον ακόλουθο τρόπο.

  • Δεδομένου ότι το σώμα SOAP είναι κρυπτογραφημένο, θα μπορεί να αποκρυπτογραφείται μόνο από τον διακομιστή ιστού που φιλοξενεί την υπηρεσία web. Αυτό οφείλεται στο πώς σχεδιάζεται το πρωτόκολλο SOAP.
  • Ας υποθέσουμε ότι εάν το μήνυμα μεταβιβάζεται στον διακομιστή βάσης δεδομένων σε αίτημα HTTP, δεν μπορεί να αποκρυπτογραφηθεί επειδή η βάση δεδομένων δεν διαθέτει σωστούς μηχανισμούς για να το πράξει.
  • Μόνο όταν το αίτημα φτάσει πραγματικά στο διακομιστή Web ως πρωτόκολλο SOAP, θα μπορεί να αποκρυπτογραφήσει το μήνυμα και να στείλει την κατάλληλη απάντηση πίσω στον πελάτη.

Θα δούμε στα επόμενα θέματα σχετικά με το πώς μπορεί να χρησιμοποιηθεί το πρότυπο ασφάλειας WS για το σαπούνι.

Πρότυπα ασφάλειας υπηρεσίας Ιστού

Όπως συζητήθηκε στην προηγούμενη ενότητα, το πρότυπο WS-Security περιστρέφεται γύρω από το ότι ο ορισμός ασφαλείας περιλαμβάνεται στην κεφαλίδα SOAP.

Η διαχείριση των διαπιστευτηρίων στην κεφαλίδα SOAP γίνεται με 2 τρόπους.

Πρώτον, ορίζει ένα ειδικό στοιχείο που ονομάζεται UsernameToken. Αυτό χρησιμοποιείται για τη μετάδοση του ονόματος χρήστη και του κωδικού πρόσβασης στην υπηρεσία διαδικτύου.

Ο άλλος τρόπος είναι να χρησιμοποιήσετε ένα Binary Token μέσω του BinarySecurityToken. Αυτό χρησιμοποιείται σε καταστάσεις στις οποίες χρησιμοποιούνται τεχνικές κρυπτογράφησης όπως Kerberos ή X.509.

Το παρακάτω διάγραμμα δείχνει τη ροή του τρόπου λειτουργίας του μοντέλου ασφαλείας στο WS Security

Ακολουθούν τα βήματα που πραγματοποιούνται στην παραπάνω ροή εργασίας

  1. Ένα αίτημα μπορεί να σταλεί από τον πελάτη υπηρεσίας Web στην υπηρεσία Security Token Service. Αυτή η υπηρεσία μπορεί να είναι μια ενδιάμεση υπηρεσία ιστού η οποία έχει σχεδιαστεί ειδικά για να παρέχει ονόματα χρήστη / κωδικούς πρόσβασης ή πιστοποιητικά στην πραγματική υπηρεσία διαδικτύου SOAP.
  2. Το διακριτικό ασφαλείας μεταβιβάζεται στη συνέχεια στον πελάτη υπηρεσίας Web.
  3. Ο πελάτης υπηρεσίας Web κάλεσε τότε την υπηρεσία web, αλλά, αυτή τη φορά, διασφαλίζοντας ότι το διακριτικό ασφαλείας είναι ενσωματωμένο στο μήνυμα SOAP.
  4. Στη συνέχεια, η υπηρεσία Web κατανοεί το μήνυμα SOAP με το διακριτικό ελέγχου ταυτότητας και, στη συνέχεια, μπορεί να επικοινωνήσει με την υπηρεσία Security Token για να δει αν το διακριτικό ασφαλείας είναι αυθεντικό ή όχι.

Το παρακάτω απόσπασμα δείχνει τη μορφή του μέρους ελέγχου ταυτότητας που είναι μέρος του εγγράφου WSDL. Τώρα με βάση το παρακάτω απόσπασμα, το μήνυμα SOAP θα περιέχει 2 επιπλέον στοιχεία, το ένα είναι το όνομα χρήστη και το άλλο είναι ο κωδικός πρόσβασης.

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

Πώς να δημιουργήσετε ασφαλείς υπηρεσίες Ιστού

Τώρα ας δούμε το παράδειγμα ασφάλειας υπηρεσίας διαδικτύου SOAP. Θα δημιουργήσουμε μια ασφάλεια υπηρεσίας Ιστού βάσει του παραδείγματος που παρουσιάστηκε προηγουμένως στο κεφάλαιο SOAP και θα προσθέσουμε ένα επίπεδο ασφαλείας σε αυτό.

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

Βήμα 1) Το πρώτο βήμα είναι να δημιουργήσετε μια κενή εφαρμογή Web Asp.Net. Από το Visual Studio 2013, κάντε κλικ στην επιλογή μενού Αρχείο-> Νέο έργο.

Μόλις κάνετε κλικ στην επιλογή Νέο έργο, το Visual Studio θα σας δώσει ένα άλλο παράθυρο διαλόγου για την επιλογή του τύπου του έργου και για να δώσει τις απαραίτητες λεπτομέρειες του έργου. Αυτό εξηγείται στο επόμενο βήμα

Βήμα 2) Σε αυτό το βήμα,

  1. Βεβαιωθείτε ότι έχετε επιλέξει πρώτα το πρότυπο C # web για την εφαρμογή Web ASP.NET. Το έργο πρέπει να είναι αυτού του τύπου για τη δημιουργία έργου διαδικτυακών υπηρεσιών. Επιλέγοντας αυτήν την επιλογή, το Visual Studio θα πραγματοποιήσει τα απαραίτητα βήματα για να προσθέσει τα απαιτούμενα αρχεία που απαιτούνται από οποιαδήποτε διαδικτυακή εφαρμογή.
  2. Δώστε ένα όνομα για το έργο σας το οποίο στην περίπτωσή μας έχει δοθεί ως " webservice.asmx " . Στη συνέχεια, φροντίστε να δώσετε μια τοποθεσία, όπου θα αποθηκευτούν τα αρχεία του έργου.

Μόλις τελειώσετε, θα δείτε το αρχείο έργου που δημιουργήθηκε στον εξερευνητή λύσεων στο Visual Studio 2013.

Βήμα 3) Σε αυτό το βήμα,

Πρόκειται να προσθέσουμε ένα αρχείο υπηρεσίας Web στο έργο μας

  1. Πρώτο δεξί κλικ στο αρχείο έργου όπως φαίνεται παρακάτω
  1. Μόλις κάνετε δεξί κλικ στο αρχείο έργου, έχετε την ευκαιρία να επιλέξετε την επιλογή "Προσθήκη-> Υπηρεσία Ιστού (ASMX) για να προσθέσετε ένα αρχείο υπηρεσίας ιστού. Απλώς δώστε ένα όνομα υπηρεσίας εκμάθησης για το αρχείο ονόματος υπηρεσίας διαδικτύου.

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

Βήμα 4) Προσθέστε τον ακόλουθο κώδικα στο αρχείο asmx της Tutorial Service. Το παρακάτω απόσπασμα κώδικα χρησιμοποιείται για την προσθήκη μιας προσαρμοσμένης κλάσης η οποία θα χρησιμοποιηθεί για την αλλαγή της κεφαλίδας SOAP όταν δημιουργείται το μήνυμα SOAP. Δεδομένου ότι τώρα θέλουμε να προσθέσουμε διαπιστευτήρια ασφαλείας στην κεφαλίδα SOAP, απαιτείται αυτό το βήμα.

return "This is a Guru99 Web Service";}public class AuthHeader : SoapHeader{public string UserName;public string Password;}}

Επεξήγηση κώδικα: -

  1. Τώρα δημιουργούμε μια ξεχωριστή τάξη που ονομάζεται AuthHeader, η οποία είναι τύπου κλάσης SoapHeader . Όποτε θέλετε να αλλάξετε αυτό που περνά στην κεφαλίδα SOAP, πρέπει να δημιουργήσετε μια κλάση που χρησιμοποιεί την ενσωματωμένη κλάση SoapHeader του .Net. Προσαρμόζοντας το SOAPheader, έχουμε πλέον τη δυνατότητα να περάσουμε ένα «Όνομα χρήστη» και «Κωδικός πρόσβασης» όταν καλείται η υπηρεσία Ιστού.
  2. Στη συνέχεια ορίζουμε μεταβλητές «Όνομα χρήστη» και «Κωδικός πρόσβασης» που είναι τύπου συμβολοσειράς. Θα χρησιμοποιηθούν για τη διατήρηση των τιμών του ονόματος χρήστη και του κωδικού πρόσβασης που μεταβιβάζονται στην υπηρεσία διαδικτύου.

Βήμα 5) Ως επόμενο βήμα, πρέπει να προστεθεί ο ακόλουθος κώδικας στο ίδιο αρχείο TutorialService.asmx . Αυτός ο κωδικός καθορίζει πραγματικά τη λειτουργία της υπηρεσίας μας στο διαδίκτυο Αυτή η λειτουργία επιστρέφει μια συμβολοσειρά "Αυτή είναι μια υπηρεσία Web9999" στον πελάτη. Αλλά αυτή τη φορά, η συμβολοσειρά θα επιστραφεί μόνο εάν η εφαρμογή πελάτη μεταβιβάσει τα διαπιστευτήρια στην υπηρεσία ιστού.

public class TutorialService : System.Web.Services.WebService{public AuthHeader Credentials;[SoapHeader("Credentials")][WebMethod]public string Guru99WebService(){if (Credentials.UserName.ToLower() != "Guru99" ||Credentials.Password.ToLower() != "Guru99Password"){throw new SoapException("Unauthorized",SoapException.ClientFaultCode);}eisereturn "This is a Guru99 Web service";}

Επεξήγηση κώδικα: -

  1. Εδώ, δημιουργούμε ένα αντικείμενο της κλάσης AuthHeader που δημιουργήθηκε στο προηγούμενο βήμα. Αυτό το αντικείμενο θα μεταφερθεί στην υπηρεσία Guru99Webservice στην οποία μπορεί να εξεταστεί προσεκτικά το όνομα χρήστη και ο κωδικός πρόσβασης.
  2. Το χαρακτηριστικό [SoapHeader] χρησιμοποιείται τώρα για να καθορίσει ότι όταν καλείται η υπηρεσία Web, πρέπει να έχει το όνομα χρήστη και τον κωδικό πρόσβασης.
  3. Σε αυτό το μπλοκ κώδικα, εξετάζουμε πραγματικά το όνομα χρήστη και τον κωδικό πρόσβασης που διαβιβάστηκαν κατά την κλήση της υπηρεσίας web Εάν το όνομα χρήστη είναι ίσο με το "Guru99" και ο κωδικός πρόσβασης είναι ίσος με το "Guru99Password", τότε το μήνυμα "Αυτή είναι μια υπηρεσία Web Guru99" διαβιβάζεται στον πελάτη. Διαφορετικά, ένα σφάλμα θα σταλεί στον πελάτη εάν έχουν περάσει λάθος αναγνωριστικό χρήστη και κωδικό πρόσβασης.

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

Παραγωγή:

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

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

Βέλτιστες πρακτικές ασφάλειας υπηρεσιών Web

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

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

  2. Ροή κλήσεων στην υπηρεσία Ιστού - Προσπαθήστε να σημειώσετε τη ροή των κλήσεων στις υπηρεσίες Ιστού. Από προεπιλογή, μια εφαρμογή θα μπορούσε να καλέσει πολλά αιτήματα υπηρεσιών ιστού με διακριτικά ελέγχου ταυτότητας που παρέχονται μεταξύ αυτών των υπηρεσιών Ιστού Όλες οι κλήσεις μεταξύ των υπηρεσιών Ιστού πρέπει να παρακολουθούνται και να καταγράφονται.

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

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

  5. Ορθός έλεγχος ταυτότητας - Ο έλεγχος ταυτότητας είναι ο μηχανισμός με τον οποίο οι πελάτες μπορούν να προσδιορίσουν την ταυτότητά τους με την υπηρεσία Ιστού χρησιμοποιώντας ένα συγκεκριμένο σύνολο διαπιστευτηρίων που μπορούν να αποδείξουν αυτήν την ταυτότητα. Κάποιος δεν πρέπει ποτέ να αποθηκεύει τα διαπιστευτήρια χρήστη, και ως εκ τούτου, εάν το WS Security χρησιμοποιείται για την κλήση της υπηρεσίας ιστού, πρέπει να σημειωθεί ότι η υπηρεσία ιστού δεν πρέπει να αποθηκεύει τα διαπιστευτήρια που αποστέλλονται στην κεφαλίδα SOAP. Αυτά πρέπει να απορριφθούν από την υπηρεσία διαδικτύου.

Περίληψη

  • Το SOAP παρέχει ένα επιπλέον επίπεδο που ονομάζεται WS Security για την παροχή πρόσθετης ασφάλειας όταν πραγματοποιούνται κλήσεις προς υπηρεσίες Web.
  • Το WS Security μπορεί να κληθεί με απλό όνομα χρήστη ή κωδικό πρόσβασης ή μπορεί να χρησιμοποιηθεί με δυαδικά πιστοποιητικά για έλεγχο ταυτότητας
  • Το έχουμε δει στο .Net μπορούμε να προσαρμόσουμε την υπηρεσία Web ώστε να έχει μεταβιβασθεί όνομα χρήστη και κωδικός πρόσβασης ως μέρος του στοιχείου κεφαλίδας SOAP.