Warum Software-Sicherheit eine Fähigkeit ist, die alle Programmierer haben sollten
Als Programmierer oder Entwickler kann die Bedeutung der Erstellung sicherer Anwendungen nicht genug betont werden.
Die Software-Sicherheit befasst sich mit der Verwaltung böswilliger Angriffe, indem potenzielle Sicherheitslücken in der Software identifiziert und die erforderlichen Vorkehrungen getroffen werden, um sich vor diesen zu schützen.
Software kann niemals 100% sicher sein, da ein Entwickler einen Fehler übersehen, neue Fehler erstellen kann, um vorhandene Fälle zu beheben, oder neue Sicherheitslücken durch Updates erstellen kann.
Es gibt jedoch zwei wichtige Methoden, mit denen alle Softwareentwickler sicherstellen können, dass sie sichere Software erstellen: Schreiben von sicherem Code und effizientes Testen Ihres Codes.
So schreiben Sie sicheren Code
Das Schreiben von sicherem Code hängt von einer Sache ab – der Fehlerbehandlung. Wenn Sie jeden potenziellen Wert vorhersehen können, den ein Benutzer Ihrer Anwendung zuführen könnte, und in Ihrem Programm eine Antwort auf diesen Wert erstellen können, schreiben Sie sicheren Code.
Dies ist viel einfacher als Sie vielleicht denken, da alle guten Entwickler fast alles über die von ihnen entwickelten Anwendungen wissen. Daher sollten Sie jeden Wert kennen, den Ihre Anwendung zur Ausführung einer Aufgabe benötigt (die genehmigten Werte), und verstehen, dass jeder andere mögliche Wert ein nicht genehmigter Wert ist.
Sicheren Code schreiben
Angenommen, Sie möchten ein Programm erstellen, das nur zwei ganzzahlige Werte von einem Benutzer akzeptiert und eine Additionsoperation für diese ausführt. Mit diesem einzigen Satz wissen Sie jetzt wie bei einem guten Entwickler alles über Ihre Anwendung. Sie kennen alle Werte, die dieses Programm akzeptiert (ganzzahlige Werte), und Sie kennen die Aufgabe, die dieses Programm ausführen wird (eine Additionsoperation).
Erstellen des Programms in Java Beispiel
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);
}
}
Der obige Code erzeugt eine Anwendung, die genau den Anforderungen entspricht. Bei der Ausführung wird die folgende Zeile in der Konsole angezeigt:
Please enter your two integer values:
Die Anwendung bleibt dann angehalten, bis der Benutzer zwei ganzzahlige Werte in die Konsole eingibt (dh den ersten Wert eingeben, die Eingabetaste drücken und wiederholen).
Wenn der Benutzer die Werte 5 und 4 in die Konsole eingibt, erzeugt das Programm die folgende Ausgabe:
The sum of the two integer values you entered: 9
Das ist toll; Das Programm macht genau das, was es tun soll. Wenn jedoch ein schändlicher Benutzer vorbeikommt und einen nicht ganzzahligen Wert wie "g" in Ihre Anwendung eingibt, treten Probleme auf. Dies liegt daran, dass kein Code in der Anwendung vor nicht genehmigten Werten schützt.
Zu diesem Zeitpunkt stürzt Ihre Anwendung ab und erstellt ein potenzielles Gateway für den Hacker, der genau weiß, was als Nächstes zu tun ist.
Sichern Ihres Programmbeispiels
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);
}
}
Der obige Code ist sicher, da er die Ausnahmebehandlung ausführt. Wenn Sie einen nicht ganzzahligen Wert eingeben, wird das Programm daher korrekt beendet, während die folgende Codezeile erstellt wird:
Please enter a valid integer value.
Was ist Ausnahmebehandlung?
Im Wesentlichen ist die Ausnahmebehandlung die moderne Version der Fehlerbehandlung, bei der Sie den Fehlerbehandlungscode vom normalen Verarbeitungscode trennen. Im obigen Beispiel befindet sich der gesamte normale Verarbeitungscode (oder Code, der möglicherweise eine Ausnahme auslösen kann) in einem try- Block, und der gesamte Fehlerbehandlungscode befindet sich in catch- Blöcken.
Wenn Sie sich das obige Beispiel genauer ansehen, werden Sie feststellen, dass es zwei Fangblöcke gibt. Der erste verwendet ein InputMismatchException- Argument. Dies ist der Name der Ausnahme, die ausgelöst wird, wenn ein nicht ganzzahliger Wert eingegeben wird. Das zweite Argument enthält eine Ausnahme , und dies ist wichtig, da der Zweck darin besteht, Ausnahmen innerhalb des Codes abzufangen, die der Entwickler beim Testen nicht gefunden hat.
Testen Sie Ihren Code
Sie sollten die Fähigkeit, Ihren Code vor dem Verpacken zu testen und erneut zu testen, niemals unterschätzen. Viele Entwickler (und Benutzer ihrer Anwendungen) finden neue Fehler, nachdem die Software der Öffentlichkeit zugänglich ist.
Durch gründliches Testen Ihres Codes wird sichergestellt, dass Sie wissen, was Ihre Anwendung in jedem denkbaren Szenario tun wird, und dass Sie Ihre Anwendung vor Datenverletzungen schützen können.
Betrachten Sie das obige Beispiel. Was ist, wenn Sie die Anwendung nach Abschluss nur mit ganzzahligen Werten testen? Sie könnten sich von der Anwendung entfernen und denken, Sie hätten alle potenziellen Fehler erfolgreich identifiziert, wenn dies nicht der Fall ist.
Tatsache ist, dass Sie möglicherweise nicht alle potenziellen Fehler identifizieren können. Aus diesem Grund geht die Fehlerbehandlung Hand in Hand mit dem Testen Ihres Codes. Das Testen des obigen Programms zeigt, dass in einem bestimmten Szenario ein potenzieller Fehler auftritt.
Wenn jedoch ein anderer Fehler vorliegt, der während des Tests nicht aufgetreten ist, wird er vom zweiten catch-Block im obigen Code behandelt.
Sichern Ihrer Datenbank
Wenn Ihre Anwendung eine Verbindung zu einer Datenbank herstellt, können Sie den Zugriff auf diese Datenbank am besten verhindern, indem Sie sicherstellen, dass alle Aspekte Ihrer Anwendung sicher sind. Was ist jedoch, wenn Ihre Anwendung ausschließlich zum Zweck der Bereitstellung einer Schnittstelle zu dieser Datenbank entwickelt wurde?
Hier wird es etwas interessanter. In ihrer einfachsten Form ermöglicht eine Datenbank einem Benutzer das Hinzufügen, Abrufen, Aktualisieren und Löschen von Daten. Ein Datenbankverwaltungssystem ist eine Anwendung, mit der ein Benutzer direkt mit einer Datenbank interagieren kann.
Die meisten Datenbanken enthalten vertrauliche Daten. Um die Integrität dieser Daten zu gewährleisten und den Zugriff darauf zu beschränken, ist daher eine Anforderung erforderlich: die Zugriffskontrolle.
Zugangskontrolle
Die Zugriffssteuerung versucht, die Integrität einer Datenbank aufrechtzuerhalten, indem die Art der Personen definiert wird, die auf eine Datenbank zugreifen können, und die Art des Zugriffs eingeschränkt wird, über den sie verfügen. Daher sollte ein gutes Datenbankverwaltungssystem in der Lage sein zu protokollieren, wer zu welcher Zeit und zu welchen Zeiten auf die Datenbank zugreift.
Es sollte auch verhindern können, dass ein registrierter Benutzer auf Daten zugreift oder diese bearbeitet, mit denen er nicht interagieren darf.
Software-Sicherheit ist eine entscheidende Fähigkeit für alle Entwickler
Die Entwicklung guter Software ist gleichbedeutend mit der Sicherstellung, dass Ihre Software böswilligen Angriffen standhält. Dies ist nur durch das Schreiben von sicherem Code, das kontinuierliche Testen einer Anwendung und die Kontrolle darüber, wer Zugriff auf Ihre Daten hat, möglich.
Nachdem Sie nun wissen, wie Sie Ihre Software sichern können, möchten Sie möglicherweise einige Schritte zur Softwareentwicklung kennenlernen.