Paranoia
Ein Wahn, der eine Menschenseele
zu reinem edlen Tun beschwingt,
ist göttlicher als solche Wahrheit,
die sie um ihre Flügel bringt.Otto von Leixner
Paranoia als Tugend? Dazu ein eindeutiges und von Herzen kommendes: JA! Softwareentwickler neigen dazu, jede Lücke die eine Software zu bieten hat, für irgendwelche Schweinereien auszunutzen. Dies sollte natürlich vermieden werden und würde auch von keinem gewissenhaften Softwareentwickler praktiziert. Doch gibt es auch, und leider muss ich das knallhart sagen, die anderen 95%, die sich einen Dreck darum kümmern. In vielen Fällen kann man sich darum streiten, ob und was noch vernünftig oder “duldsam” ist. Ein Beispiel stellt die Speicherfreigabemethode free(void *p) von C dar. Die Methode duldet es schweigsam, wenn ihr ein Null-Zeiger übergeben wird. In meinen Augen ist dies kein haltbarer Zustand, da kein gültiger Zeiger übergeben wurde. Mir erscheint es dann fragwürdig, ob der Rest des entsprechenden Programms seine Richtigkeit haben kann, wenn jenes schon versucht ungültigen Speicher freizugeben. Würde ich solch eine Funktion implementieren, so würde ich gnadenlose Strenge walten lassen. Programmierer werden alles mit dem eigenen Code veranstalten, vieles was man sich selbst nicht zu denken getraut. Aus diesem Grund ist es wichtig sich zu verschanzen. Glasklare Schnittstellen zu definieren und diese penibel zu überwachen. Und wann immer es möglich ist, die Daten die für die Ausführung von Algorithmen nötig sind, vorher auf Plausibilität zu überprüfen. Jeder Mathematiker würde sich im Grabe umdrehen, wenn z.B. bei einer Logarithmusfunktion bei einem Parameter kleiner oder gleich Null, die maximal mögliche negative Zahl zurückgegeben wird, weil dieser Wert nicht berechnet werden kann. Und das sollte man die anderen auch spüren lassen. Wer nicht sauber programmiert, muss dazu erzogen werden. Sorge dafür, dass deine Programmteile solche Eingaben nicht tolerieren. Wirf zur Not eine Mittelfinger-Exception! Diese Angriffe von innen sind schon gefährlich genug. Doch gibt es leider auch Schnittstellen zum Anwender. Und das fatale daran ist, er kann selbstständig Eingaben, in welcher Form auch immer, machen. Hier ist die größte aller Vorsichten geboten. Ein Anwender wird immer all das eingeben, was er nicht soll und in keinster Weise in einem logischen Zusammenhang steht. Selbst die gewieftesten Tester können so manchen anwendertechnischen Gehirnfurz auch unter größten Anstrengungen nicht selbst zusammengähren. Deshalb ist es wichtig, sich vor allen möglichen und unliebsamen Überraschungen zu schützen. Das einzige was wirklich hilft: Wir müssen extrem paranoid werden. Vertraue weder den Anwendern, noch Testern und schon garnicht den eigenen Kollegen. Diese können nämlich in unseren eigenen Quellcode schauen und sich gezielt Lücken rauspicken. Davor muss man einen Riegel schieben. Auch sich selbst gegenüber sollte man kritischer werden und sich stets daringehen überprüfen, ob wirklich alles Entwicklermögliche getan wurde, um solche grob fahrlässigen Angriffe auf die eigene Software zu unterbinden. Dazu zählt auch selbstverständlich, keine Programmteile auf eine Art und Weise zu nutzen, die keinen Sinn ergeben oder von den Erbauern nicht so angedacht wurden. Mit dem obigen Beispiel heißt dies, sorge dafür, das einfach keine Nullzeiger an free(…) übergeben werden. Denn auch Programmteile die aufgerufen werden, können die eigenen Methoden und Funktionen unbrauchbar machen. Dieser fade Nachgeschmack bleibt aber dann bei einem selbst hängen und nicht bei jenem, dessen Funktionen wir verwendet haben. Zusammengefasst: Spezifiziere ersteinmal eine genaue Schnittstelle mit Datentypen und gültigen Wertebereichen. Entwickle für diese Eingabeparameter deine Funktion bzw Programmteile und sorge dafür, das diese um Hilfe schreien, wenn jemand falsche Daten übergibt. Zuletzt lasse große Sorgfalt beim Verwenden anderer Funktionen und Methoden walten. Zolle jenen den gleichen Respekt, den du auch bei deinen Programmteilen erwartest. Nur weil eine Methode derzeit einen Nullzeiger schweigsam frisst, heißt das noch lange nicht, das sie dieses auch in einem halben Jahr noch tut.
CHECK YOUR PARANOIA!