In dem Blog Post “Security fängt vorne an” haben wir einen Blick ins auf Sicherheits Probleme im Frontend geworfen, aber Sicherheit hört nicht im Frontend auf sondern geht im Backend weiter. 

Gerade im Backend fühlen sich viele Entwickler sicher, da ihre Daten aus den eigenen Systemen kommen, doch genau da liegt der Fehler. Wurden die Daten den wirklich geprüft bevor diese in die Datenbank geschrieben worden? Wissen wir wirklich, dass niemand anderes Daten an unser Backendsystem senden kann? 

Im Bereich der Sicherheit ist es die einfache Regel, traue niemand und traue keiner Datenquelle. Sobald wir Daten einlesen, sollten wir auch sicher gehen, dass wir diese validieren.  

Wie schon im Fontend Artikel erwähnt, ist das Logging in Fehlerfällen sehr wichtig. 

Logging im Backend 

Das Logging im Backend sollte mindestens in zwei Kategorien erfolgen, Sicherheits-Logs und andere Logs. 

In ein Sicherheits-Log würden in diesem Fall nur Meldungen geschrieben werden, welche Auswirkungen auf die Sicherheit der Anwendung haben können. Es ist dabei sinnvoll möglichst viele Informationen zum Dokumentieren und verfolgen von Angriffsvektoren in diesem Log zu sammeln, allerdings ist es genauso wichtig, dass die richtigen und wichtigen Informationen nicht in der Masse untergehen. Es mag den Anschein haben, dass sich diese Aussagen wiedersprechen, aber eigentlich bedeutet es nur denken Sie zweimal nach was und was Sie nicht in das Sicherheits-Log schreiben. 

Ist zum Beispiel einfach ein Service nicht erreichbar, ist dies vermutlich weniger ein Sicherheits-, als ein Infrastrukturproblem. 
Ein Login oder das ändern von Rechten eines Benutzers, könnte allerdings etwas sein, was uns beim Nachvollziehen eines Sicherheitsproblem und dem prüfen der Ursachen hilfreich sein könnte. 

Es ist also in erster Linie wichtig sich zu überlegen, was genau will man loggen und in welches Log schreiben wir es?
Manchmal ist es auch sinnvoll manche Aktionen in mehr als einem Log zu speichern. 

Validierung im Backend 

Wie schon in der Einleitung erwähnt, ist die Validierung und auch möglicherweise eine Plausibilitätsprüfung im Backend immer sinnvoll, wenn wir Daten aus einer Quelle lesen. 

Die Aussage, “Ich weiß doch was in meiner Datenbank steht, ich habe es auch hineingeschrieben”, mag vielleicht soweit stimmen, dass wirklich nur dieser Service auf diese eine Datenbank schreibend zugreift. Aber woher wollen wir wissen, dass wir beim schreiben in die Datenbank 100% aller möglichen Fehler abgefangen haben oder ob nicht ein Admin direkt auf der Datenbank eine “Korrektur” der Daten vorgenommen hat? 

Wir sollten uns nie zu sicher sein und festlegen, dass wir genau wissen welche Daten wir in welcher Qualität erhalten. Wie überall ist es auch hier am sinnvollsten immer von dem schlimmsten aller Fälle auszugehen. 

Kurz gefasst ist eine Validierung also immer sinnvoll und sollte sowohl beim Lesen als auch beim Schreiben der Daten erfolgen. Das Einhalten der Sicherheit wird uns hier beim Entwickeln zwar etwas mehr Aufwand generieren, aber unsere Applikation wird dadurch nur besser. 

Im Idealfall stellen wir unsere Validierungsregeln im Backend auch dem Client zur Verfügung, somit kann dieser die gleichen Regeln für eingaben nutzen. 

Fazit 

Validierung und Logging sind im Backend mindestens genauso wichtig wie im Frontend. Man könnte auch sagen, es ist wichtiger. Sollte unser Client fehlerhafte Anfragen senden oder Sicherheitsaspekte nicht einhalten passiert nicht notwendiger Weise etwas Schlimmes. Sollte aber unser Backend Informationen verarbeiten und nicht prüfen können unsere Daten und Systeme manipuliert werden. 

Mit Validierungen können wir zwar eine große Sicherheit gewährleisten, aber es gibt noch viele andere Aspekte, welche auch durch Validierung nicht immer abgesichert werden können. 

Unteranderem bietet hier die OWASP Top 10 einen Überblick der aktuell wichtigsten Angriffsmöglichkeiten. In einem der kommenden Blog Artikel werden wir darauf auch weiter eingehen.