Ως προγραμματιστής ή προγραμματιστής, η σημασία της δημιουργίας ασφαλών εφαρμογών δεν μπορεί να υπερεκτιμηθεί.

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

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

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

Πώς να γράψετε ασφαλή κώδικα

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

instagram viewer

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

Σύνταξη ασφαλούς κώδικα

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

Δημιουργία του προγράμματος στο παράδειγμα Java


εισαγωγή java.util. Ερευνητής;
δημόσια τάξη Main {
// Η κύρια συνάρτηση που εκτελεί το πρόγραμμα και συλλέγει τις δύο τιμές
Δημόσιο στατικό κενό (String [] args) {
System.out.println ("Εισαγάγετε τις δύο ακέραιες τιμές σας:");
int τιμή1;
int τιμή2;
Είσοδος σαρωτή = νέο σαρωτή (System.in);
τιμή1 = input.nextInt ();
τιμή2 = input.nextInt ();
προσθήκη (τιμή1, τιμή2);
input.close ();
}
// η συνάρτηση που συλλέγει τις δύο τιμές και εμφανίζει το άθροισμά τους
ιδιωτική στατική κενή προσθήκη (int value1, int value2) {
int ποσό;
άθροισμα = τιμή1 + τιμή2;
System.out.println ("Το άθροισμα των δύο ακέραιων τιμών που εισαγάγατε:" + άθροισμα);
}
}

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


Εισαγάγετε τις δύο ακέραιες τιμές σας:

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

Εάν ο χρήστης εισάγει τις τιμές 5 και 4 στην κονσόλα, το πρόγραμμα θα παράγει την ακόλουθη έξοδο:


Το άθροισμα των δύο ακέραιων τιμών που εισαγάγατε: 9

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

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

Εξασφάλιση του παραδείγματος του προγράμματος


εισαγωγή java.util. InputMismatchException;
εισαγωγή java.util. Ερευνητής;
δημόσια τάξη Main {
// Η κύρια συνάρτηση που εκτελεί το πρόγραμμα και συλλέγει τις δύο τιμές
Δημόσιο στατικό κενό (String [] args) {
δοκιμάστε {
System.out.println ("Εισαγάγετε τις δύο ακέραιες τιμές σας:");
int τιμή1;
int τιμή2;
// χρησιμοποιώντας την κλάση σαρωτή για να διαβάσετε κάθε είσοδο από τον χρήστη,
// και να το αντιστοιχίσετε σε αντίστοιχη μεταβλητή (ρίχνει μια εξαίρεση εάν οι τιμές δεν είναι ακέραιοι)
Είσοδος σαρωτή = νέο σαρωτή (System.in);
τιμή1 = input.nextInt ();
τιμή2 = input.nextInt ();
// καλεί τη συνάρτηση προσθήκης και μεταβιβάζει τις δύο τιμές σε αυτήν
προσθήκη (τιμή1, τιμή2);
// κλείνει τη ροή εισόδου μετά το τέλος της χρήσης της
input.close ();
// χειριστείτε όλα τα λάθη που ρίχνονται στο μπλοκ δοκιμής
} catch (InputMismatchException e) {
System.out.println ("Εισαγάγετε μια έγκυρη ακέραια τιμή.");
} αλίευση (Εξαίρεση ε) {
System.out.println (e.getMessage ());
}
}
// η συνάρτηση που συλλέγει τις δύο τιμές και εμφανίζει το άθροισμά τους
ιδιωτική στατική κενή προσθήκη (int value1, int value2) {
int ποσό;
άθροισμα = τιμή1 + τιμή2;
System.out.println ("Το άθροισμα των δύο ακέραιων τιμών που εισαγάγατε:" + άθροισμα);
}
}

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


Εισαγάγετε μια έγκυρη ακέραια τιμή.

Τι είναι ο χειρισμός της εξαίρεσης;

Ουσιαστικά, ο χειρισμός εξαιρέσεων είναι η σύγχρονη έκδοση του χειρισμού σφαλμάτων, όπου διαχωρίζετε τον κώδικα χειρισμού σφαλμάτων από τον κανονικό κώδικα επεξεργασίας. Στο παραπάνω παράδειγμα, όλοι οι κανονικοί κώδικες επεξεργασίας (ή κώδικας που δυνητικά μπορεί να ρίξουν μια εξαίρεση) βρίσκονται μέσα σε ένα δοκιμάστε μπλοκ, και όλος ο κωδικός χειρισμού σφαλμάτων βρίσκεται μέσα σύλληψη μπλοκ.

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

Σχετιζομαι με: Εξαιρέσεις Java: Τους χειρίζεστε σωστά;

Δοκιμή του κωδικού σας

Δεν πρέπει ποτέ να υποτιμάτε τη δύναμη του ελέγχου και της δοκιμής του κωδικού σας πριν από τη συσκευασία. Πολλοί προγραμματιστές (και χρήστες των εφαρμογών τους) βρίσκουν νέα σφάλματα αφού το λογισμικό είναι διαθέσιμο στο κοινό.

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

Σχετιζομαι με: Πώς να προσγειώσετε την πρώτη σας εργασία δοκιμής λογισμικού

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

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

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

Εξασφάλιση της βάσης δεδομένων σας

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

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

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

Έλεγχος πρόσβασης

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

Θα πρέπει επίσης να μπορεί να εμποδίζει έναν εγγεγραμμένο χρήστη να έχει πρόσβαση ή να επεξεργάζεται δεδομένα με τα οποία δεν είναι εξουσιοδοτημένος να αλληλεπιδράσει.

Η ασφάλεια λογισμικού είναι μια κρίσιμη ικανότητα για όλους τους προγραμματιστές

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

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

ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ
6 βήματα ανάπτυξης λογισμικού που πρέπει να γνωρίζουν όλοι οι προγραμματιστές

Προετοιμάζετε να κωδικοποιήσετε το πρώτο σας πρόγραμμα; Φροντίστε να ακολουθήσετε αυτά τα βασικά βήματα ανάπτυξης λογισμικού.

Διαβάστε Επόμενο

Σχετικά θέματα
  • Προγραμματισμός
  • Κυβερνασφάλεια
  • Συμβουλές κωδικοποίησης
Σχετικά με τον Συγγραφέα
Kadeisha Kean (Δημοσιεύθηκαν 15 άρθρα)

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

Περισσότερα από την Kadeisha Kean

Εγγραφείτε στο Newsletter μας

Εγγραφείτε στο ενημερωτικό δελτίο μας για τεχνικές συμβουλές, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!

Ένα ακόμη βήμα…!

Επιβεβαιώστε τη διεύθυνση email σας στο email που μόλις σας στείλαμε.

.