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

Η ασφάλεια λογισμικού παίζει εξαιρετικά σημαντικό ρόλο
Πώς να γράψετε ασφαλή κώδικα
Η σύνταξη ασφαλούς κώδικα έχει μόνο ένα πράγμα - τη διαχείριση σφαλμάτων. Εάν μπορείτε να προβλέψετε κάθε πιθανή τιμή που μπορεί να παρέχει ο χρήστης στην εφαρμογή και να δημιουργήσετε μια απάντηση στο πρόγραμμα για αυτήν την τιμή, τότε γράφετε ασφαλή κώδικα.
Αυτό είναι πολύ πιο απλό από ό,τι φαντάζεστε, καθώς όλοι οι καλοί προγραμματιστές γνωρίζουν σχεδόν τα πάντα για τις εφαρμογές που αναπτύσσουν. Επομένως, θα πρέπει να γνωρίζετε κάθε τιμή που απαιτεί η εφαρμογή σας για την εκτέλεση μιας εργασίας (εγκεκριμένες τιμές) και να κατανοήσετε ότι τυχόν άλλες τιμές που μπορεί να υπάρχουν είναι μη εγκεκριμένες τιμές.
Γράψτε ασφαλή κωδικό
Ας υποθέσουμε ότι θέλετε να δημιουργήσετε ένα πρόγραμμα που δέχεται μόνο δύο ακέραιες τιμές από τον χρήστη και εκτελεί μια λειτουργία προσθήκης σε αυτές. Ως καλός προγραμματιστής, τώρα γνωρίζετε τα πάντα για την εφαρμογή σας. Γνωρίζετε όλες τις τιμές που θα δεχτεί αυτό το πρόγραμμα (ακέραιες τιμές) και γνωρίζετε την εργασία που θα ολοκληρώσει αυτό το πρόγραμμα (μια λειτουργία προσθήκης).
Παράδειγμα δημιουργίας προγράμματος σε Java
import java.util.Scanner;
public class Main {
//The main function that executes the program and collects the two values
public static void main(String[] args) {
System.out.println("Please enter your two integer values: ");
int value1;
int value2;
Scanner input = new Scanner(System.in);
value1 = input.nextInt();
value2 = input.nextInt();
addition(value1, value2);
input.close();
}
//the function that collects the two values and displays their sum
private static void addition(int value1, int value2) {
int sum;
sum = value1 + value2;
System.out.println("The sum of the two integer values you entered: "+ sum);
}
}
Ο παραπάνω κωδικός δημιουργεί μια εφαρμογή που ταιριάζει ακριβώς στις απαιτήσεις. Όταν εκτελεστεί, θα παράγει την ακόλουθη γραμμή στην κονσόλα:
Please enter your two integer values:
Στη συνέχεια, η εφαρμογή θα παραμείνει σε παύση έως ότου ο χρήστης εισαγάγει δύο ακέραιες τιμές στην κονσόλα (που σημαίνει ότι εισάγετε την πρώτη τιμή, πατήστε το πλήκτρο Enter και επαναλάβετε).
Εάν ο χρήστης εισάγει τις τιμές 5 και 4 στην κονσόλα, το πρόγραμμα παράγει την ακόλουθη έξοδο:
The sum of the two integer values you entered: 9
Αυτό είναι υπέροχο. Το πρόγραμμα κάνει ακριβώς αυτό που πρέπει να κάνει. Ωστόσο, εάν εισέλθει ένας κακόβουλος χρήστης και εισαγάγει μια μη ακέραια τιμή, όπως "g", στην εφαρμογή σας, θα υπάρξει πρόβλημα. Αυτό συμβαίνει επειδή δεν υπάρχει κωδικός στην εφαρμογή που να προστατεύει από μη εγκεκριμένες τιμές.
Σε αυτό το σημείο, η εφαρμογή σας θα καταρρεύσει, δημιουργώντας μια πιθανή πύλη στην εφαρμογή σας, ώστε οι χάκερ να γνωρίζουν ακριβώς τι να κάνουν στη συνέχεια.
Παράδειγμα ασφάλειας προγράμματος
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
//The main function that executes the program and collects the two values
public static void main(String[] args) {
try {
System.out.println("Please enter your two integer values: ");
int value1;
int value2;
//using the scanner class to read each input from the user,
//and assign it to is respective variable (throws an exception if the values are not integers)
Scanner input = new Scanner(System.in);
value1 = input.nextInt();
value2 = input.nextInt();
//calls the addition function and passes the two values to it
addition(value1, value2);
//closes the input stream after it has come to the end of its use
input.close();
//handle all the errors thrown in the try block
}catch(InputMismatchException e){
System.out.println("Please enter a valid integer value.");
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
//the function that collects the two values and displays their sum
private static void addition(int value1, int value2) {
int sum;
sum = value1 + value2;
System.out.println("The sum of the two integer values you entered: "+ sum);
}
}
Ο παραπάνω κώδικας είναι ασφαλής επειδή εκτελεί χειρισμό εξαιρέσεων. Επομένως, εάν εισαγάγετε μια μη ακέραια τιμή, το πρόγραμμα θα δημιουργήσει την ακόλουθη γραμμή κώδικα:
Please enter a valid integer value.
Τι είναι ο χειρισμός Εξαίρεσης;

Εξαίρεση χειρισμού
Ουσιαστικά, ο χειρισμός εξαιρέσεων είναι η σύγχρονη έκδοση του χειρισμού σφαλμάτων, όπου διαχωρίζετε τον κωδικό χειρισμού σφαλμάτων από τον κανονικό κώδικα χειρισμού. Στο παραπάνω παράδειγμα, όλος ο κανονικός κώδικας χειρισμού (ή δυνητικά ο κώδικας που προκαλεί εξαιρέσεις) βρίσκεται στο μπλοκ δοκιμής και όλος ο κώδικας χειρισμού σφαλμάτων βρίσκεται στο μπλοκ catch.
Αν κοιτάξετε πιο προσεκτικά το παραπάνω παράδειγμα, θα δείτε ότι υπάρχουν δύο μπλοκ συλλήψεων. Το πρώτο λαμβάνει ένα όρισμα InputMismatchException - αυτό είναι το όνομα της εξαίρεσης που δημιουργείται εάν εισαχθεί μια μη ακέραια τιμή. Το δεύτερο λαμβάνει το όρισμα Exception , και αυτό είναι σημαντικό επειδή ο σκοπός του είναι να βρει τυχόν εξαιρέσεις στον κώδικα που δεν βρήκε ο προγραμματιστής κατά τη δοκιμή.
Ελέγξτε τον κωδικό
Δεν πρέπει ποτέ να υποτιμάτε τη δύναμη της δοκιμής και της επανεξέτασης του κώδικα. Πολλοί προγραμματιστές (και χρήστες εφαρμογών) βρίσκουν νέα σφάλματα μετά τη διάθεση του λογισμικού στο κοινό.
Ο ενδελεχής έλεγχος του κώδικά σας διασφαλίζει ότι γνωρίζετε τι θα κάνει η εφαρμογή σας σε κάθε πιθανή περίπτωση και ότι σας επιτρέπει να την προστατεύσετε από παραβιάσεις δεδομένων.
Εξετάστε το παραπάνω παράδειγμα. Τι γίνεται αν, αφού ολοκληρωθεί, δοκιμάσετε την εφαρμογή μόνο με ακέραιες τιμές; Μπορείτε να φύγετε από την εφαρμογή νομίζοντας ότι έχετε εντοπίσει επιτυχώς όλα τα πιθανά σφάλματα, ενώ στην πραγματικότητα δεν το έχετε κάνει.
Η πραγματικότητα είναι ότι μπορεί να μην μπορείτε να εντοπίσετε όλα τα πιθανά σφάλματα. Αυτός είναι ο λόγος για τον οποίο ο χειρισμός σφαλμάτων λειτουργεί παράλληλα με τη δοκιμή του κώδικά σας. Η δοκιμή του παραπάνω προγράμματος αποκαλύπτει ένα πιθανό σφάλμα που θα προκύψει σε μια συγκεκριμένη κατάσταση.
Ωστόσο, εάν υπάρχει κάποιο άλλο σφάλμα που δεν εμφανίστηκε κατά τη δοκιμή, τότε το δεύτερο μπλοκ catch στον παραπάνω κώδικα θα το χειριστεί.
Ασφάλεια βάσης δεδομένων
Εάν η εφαρμογή σας συνδέεται με μια βάση δεδομένων, ο καλύτερος τρόπος για να αποτρέψετε την πρόσβαση σε αυτήν τη βάση δεδομένων είναι να διασφαλίσετε ότι όλες οι πτυχές της εφαρμογής είναι ασφαλείς. Ωστόσο, τι γίνεται εάν η εφαρμογή σας έχει σχεδιαστεί με μοναδικό σκοπό την παροχή διεπαφής στην εν λόγω βάση δεδομένων;
Εδώ είναι που τα πράγματα γίνονται λίγο πιο ενδιαφέροντα. Στην πιο βασική τους μορφή, οι βάσεις δεδομένων επιτρέπουν στους χρήστες να προσθέτουν, να ανακτούν, να ενημερώνουν και να διαγράφουν δεδομένα. Ένα σύστημα διαχείρισης βάσεων δεδομένων είναι μια εφαρμογή που επιτρέπει στους χρήστες να αλληλεπιδρούν απευθείας με μια βάση δεδομένων.
Οι περισσότερες βάσεις δεδομένων περιέχουν ευαίσθητα δεδομένα, επομένως, για τη διατήρηση της ακεραιότητας και τον περιορισμό της πρόσβασης σε αυτά τα δεδομένα, υπάρχει απαίτηση - έλεγχος πρόσβασης.
Έλεγχος πρόσβασης
Ο έλεγχος πρόσβασης επιδιώκει να διατηρήσει την ακεραιότητα της βάσης δεδομένων προσδιορίζοντας τους τύπους ατόμων που μπορούν να έχουν πρόσβαση στη βάση δεδομένων και περιορίζοντας τον τύπο πρόσβασης που έχουν. Επομένως, ένα καλό σύστημα διαχείρισης βάσεων δεδομένων πρέπει να μπορεί να καταγράφει ποιος, πότε και τι έκανε πρόσβαση στη βάση δεδομένων.
Μπορεί επίσης να εμποδίσει τους εγγεγραμμένους χρήστες να έχουν πρόσβαση ή να επεξεργάζονται δεδομένα με τα οποία δεν είναι εξουσιοδοτημένοι να αλληλεπιδρούν.