Sicherheit von Programmiersprachen


[ Gliederung ] [ Einführung ] [ Effizienz ] [ Regelmäßigkeit ] [ Einfachheit ] [ Ausdruckskraft ] [ Erweiterbarkeit ]
[ Einschränkbarkeit ] [ Präzision ] [ Sicherheit ] [ Fazit ] [ Literatur und Internetquellen ]

Sicherheit


Sicherheit von Programmiersprachen


Die Sicherheit ist ebenfalls ein wichtiges Feld im Design von Programmiersprachen. In jedem Fall sollte der Compiler einem möglichst fehlerfreien Code erzeugen und jeden syntaktischen Fehler im Programm anzeigen. Beim Programmieren hingegen besteht immer die Gefahr, dass der Programmierer beim Implementieren seiner Software einen Fehler macht. Es ist schlicht unmöglich dies auszuschließen. Somit liegt es ebenfalls an der Programmiersprache solche Fehler möglichst gering zu halten. Es sollte also schon mögliche Fehler durch das Design einer Programmiersprache ausgeschlossen werden. Ein Beispiel in C und Pascal soll dies einmal verdeutlichen.

C:

switch (e) f
{
	0 :
	1 : S1;
	 break;
	2 : S2; 
	3 : S3;
	 break;

}

Pascal:

case (e) of
	1,3 : S1;
	4..9 : S2;
	99 : S3;
end

In der Sprache C ist es in einem switch-Statement immer notwendig nach einer Option ein break zu setzen, weil ansonsten die darauf folgenden Optionen ebenfalls ausgeführt werden. Dies ist natürlich eine potentielle Fehlerquelle, da man schnell mal ein break vergisst, was beim Testen später vielleicht nicht auffällt.
In Pascal tritt das Problem nicht auf. Sollte in einem case-Statement eine Option zutreffen, so wird sie ausgeführt und das case-Statement verlassen. Ein potentieller Fehler wie durch ein vergessenes Break wird somit vermieden.
Ein Problem der erhöhten Sicherheit von Programmiersprachen ist ein Nachlassen der Effizienz des programmierten Codes. Effizienz und Sicherheit einer Programmiersprache sind oft schwer zu vereinbarende Ziele.
Als ein Beispiel könnte hier die Initialisierung von Programmvariablen dienen. In C wird eine Variable mit einem willkürlichem Wert initialisiert. Dies kann zu einem Sicherheitsproblem werden, da bei einem Test ein zufälliger Wert ein richtiges Ergebnis geben kann und somit der Fehler übersehen wird. Wenn eine Variable mit einem Default Wert initialisiert wird (Beispiel Java), so wird die Chance auf einen Programmierfehler minimiert. Das selbstständige Initialisieren erzeugt zwar Overhead im Programmcode und führt zu einem weniger effizienten Code, jedoch ist der Gewinn an Zuverlässigkeit viel höher einzuschätzen.
[ Gliederung ] [ Einführung ] [ Effizienz ] [ Regelmäßigkeit ] [ Einfachheit ] [ Ausdruckskraft ] [ Erweiterbarkeit ]
[ Einschränkbarkeit ] [ Präzision ] [ Sicherheit ] [ Fazit ] [ Literatur und Internetquellen ]