Οι προεπιλογές μπορούν να σας βυθίσουν
TL;DR: Αντιμετωπίστε τις άγνωστες απαντήσεις ως μη εξουσιοδοτημένες, όχι ως έγκυρες.
Προβλήματα
- Κίνδυνοι ασφάλειας
- Αγνοώντας άγνωστες περιπτώσεις
- Λάθος Παρερμηνεία
- Προεπιλογή σε έγκυρες καταστάσεις
- Αναντιστοιχίες εξουσιοδοτήσεων
- Αποτυχία καταγραφής συμβάντων
- Δυνατότητα εκμετάλλευσης
Λύσεις
- Επικυρώστε όλες τις απαντήσεις σε σχέση με ένα κλειστό σύνολο γνωστών κωδικών.
- Προεπιλογή (και άγνωστη) έως μη εξουσιοδοτημένη ή Κατάργηση προεπιλογών .
- Καταγράψτε κάθε αναντιστοιχία ή απροσδόκητη περίπτωση για ανάλυση.
- Δοκιμή με σενάρια ακμών.
- Συγχρονίστε τακτικά τις ομάδες απόκρισης με επεξεργαστές για να αποφύγετε τους παλιούς κωδικούς.
- Επικεντρωθείτε στην ασφάλεια, καθιστώντας τη διαδικασία μετατόπισης προς τα αριστερά.
- Σχεδιάστε συστήματα με ανθεκτικότητα στην αλλαγή για να χειρίζονται εξελισσόμενα σενάρια.
Συμφραζόμενα
Σήμερα είναι ημέρα ασφάλειας υπολογιστών και κάθε προγραμματιστής πρέπει να αναγνωρίσει την ευθύνη του.
Φανταστείτε μια εφαρμογή που χειρίζεται πωλήσεις που βασίζεται σε ομάδες απόκρισης από επεξεργαστές πιστωτικών καρτών για τη διαχείριση των συναλλαγών.
Κάθε επεξεργαστής πιστωτικών καρτών παρέχει προκαθορισμένους κωδικούς απόκρισης για διάφορες καταστάσεις, όπως ανεπαρκές υπόλοιπο ή ληγμένες κάρτες.
Το ζήτημα ξεκινά όταν ένας επεξεργαστής προσθέτει έναν νέο κωδικό απόκρισης για συναλλαγές που έχουν απορριφθεί, αλλά δεν ειδοποιεί την πλατφόρμα.
Η εφαρμογή δεν αναγνωρίζει τον νέο κωδικό, τον αντιμετωπίζει από προεπιλογή ως "δεν βρέθηκε" και εξουσιοδοτεί την αγορά.
Οι χρήστες παρατηρούν αυτό το ελάττωμα και το εκμεταλλεύονται για να κάνουν μη εξουσιοδοτημένες αγορές.
Τα έσοδα της πλατφόρμας πέφτουν κατακόρυφα, οδηγώντας σε χρεοκοπία.
Δείγμα κώδικα
Λανθασμένος
String response = paymentProcessor.authorize(cardDetails); switch (response) { case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; default: // Authorize purchase break; }
Δικαίωμα
String response = paymentProcessor.authorize(cardDetails); switch (response) { case "APPROVED": // Authorize purchase break; case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; case "DECLINED_NEW_REASON": // Handle new declined reason break; default: // Reject purchase (default case for unknown responses) break; }
Ανίχνευση
- [x] Εγχειρίδιο
Μπορείτε να εντοπίσετε αυτή τη μυρωδιά ελέγχοντας τη λογική διαχείρισης σφαλμάτων.
Ελέγξτε εάν το σύστημα καταγράφει και απορρίπτει μη αναγνωρισμένες περιπτώσεις.
Οι αυτοματοποιημένες δοκιμές μπορούν να σας βοηθήσουν να προσδιορίσετε εάν νέες ή μη αναμενόμενες εισροές προεπιλογή για έγκυρες ενέργειες.
Τα εργαλεία στατικής ανάλυσης μπορούν να βοηθήσουν επισημαίνοντας τον δυνητικά ατελή χειρισμό σφαλμάτων.
Ετικέτες
- Ασφάλεια
Επίπεδο
- [x] Ενδιάμεσο
Γιατί το Bijection είναι σημαντικό
Είναι σημαντικό να διατηρείτε μια αλληλογραφία ένας προς έναν μεταξύ της εσωτερικής αναπαράστασης των απαντήσεων του επεξεργαστή πληρωμών της εφαρμογής σας και των πραγματικών κωδικών που επιστρέφονται από τον επεξεργαστή.
Όταν σπάτε το Bijection , δημιουργείτε μια αναντιστοιχία.
Η εφαρμογή ερμηνεύει άγνωστους κωδικούς εσφαλμένα, οδηγώντας σε απροσδόκητη συμπεριφορά, κενά ασφαλείας και δυνητικά καταστροφικές επιχειρηματικές συνέπειες.
Γενιά AI
Τα εργαλεία τεχνητής νοημοσύνης μπορούν να δημιουργήσουν αυτήν τη μυρωδιά αν δεν προσδιορίσετε πώς να χειρίζεστε άγνωστες περιπτώσεις.
Για παράδειγμα, ο γενικός χειρισμός σφαλμάτων ενδέχεται να έχει ως προεπιλογή καλοήθη αποτελέσματα όπως "δεν βρέθηκε" ή "επιτυχία".
Ανίχνευση AI
Οι γεννήτριες τεχνητής νοημοσύνης μπορούν να διορθώσουν αυτή τη μυρωδιά όταν τους δίνετε εντολή να αντιμετωπίζουν άγνωστες περιπτώσεις ως μη εξουσιοδοτημένες και δίνουν έμφαση στην καταγραφή και τη δοκιμή απροσδόκητων σεναρίων.
Δοκιμάστε τα!
Θυμηθείτε: Οι Βοηθοί AI κάνουν πολλά λάθη
Χωρίς κατάλληλες οδηγίες | Με συγκεκριμένες οδηγίες |
---|---|
Σύναψη
Να χειρίζεστε πάντα άγνωστες περιπτώσεις με προσοχή.
Προεπιλογές όπως "δεν βρέθηκε" μπορεί να οδηγήσουν σε σοβαρά ζητήματα ασφάλειας και οικονομικές απώλειες.
Κάντε την καταγραφή και την άρνηση άγνωστων απαντήσεων μέρος των πρακτικών ανάπτυξής σας.
Λάβετε αποφάσεις μετατόπισης προς τα αριστερά που σχετίζονται με την ασφάλεια κατά τον προγραμματισμό.
Συγγένειες
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352
Αρνηση
Το Code Smells είναι η γνώμη μου.
Πιστώσεις
Φωτογραφία της Nathana Rebouças στο Unsplash
https://www.youtube.com/watch?v=J2QOejhA6ek
Οι υποθέσεις είναι η μητέρα όλων των αποτυχιών.
είπε ο Ouissal
Τεχνολογία Λογισμικού Υπέροχες προσφορές
Αυτό το άρθρο είναι μέρος της σειράς CodeSmell.