# Online-Datendienst absichern



## Gelöschtes Mitglied 9001 (26. Apr 2011)

Hallo,

in meinem Programm gibt es eine Eingabemaske mit drei Feldern (Komponist und zwei für den Namen eines Musikstückes). Der Anwender soll damit musikstückbezogene Daten beschriften können. Damit das schneller von der Hand geht, soll bereits nach der Eingabe weniger Zeichen das Programm Vorschläge einblenden, die sich durch Anklicken übernehmen lassen.

Da ich nun selbst nicht das gesamte Weltrepertoire als Resource jeder Programmdatei mitgeben kann (und das Repertoire stetig wächst), habe ich eine Online-Datenbank eingerichtet, auf die mein Programm via REST-Api zugreift und sich die Vorschläge von dort holt. Das gibt mir die Möglichkeit, die Datenbank kontinuierlich weiter zu füllen und die Benutzer selbst sollen diese Datenbank auch pflegen können: Getätigte Eingaben der Maske werden in diese Datenbank übernommen und dann ggf. anderen Nutzern als Vorschlag angezeigt.
Selbstverständlich gibt es ein Häkchen direkt über der Maske, mit der sich die Funktion deaktivieren läßt. Der Benutzer wird auch darauf hingewiesen, daß er bei aktivierter Onlinefunktion keine privaten Daten eingeben sollte.
Über eine Webseite haben die Benutzer die Möglichkeit, den Datenbestand zu pflegen und fehlerhafte Daten zu korrigieren. Also ein bißchen wie Wikipedia: basiert auf dem Vertrauen, daß die Benutzer nichts Dummes damit anstellen.
Obgleich es sich bei meinem Programm um ein absolutes Nischenprodukt handelt, dessen Kompromittierung für Hacker und Streichespieler relativ uninteressant sein dürfte, weil die Zahl der Anwender insgesamt sehr klein ist (derzeit geschätzt < 100), muß man sich dennoch den Fragen stellen, wie man damit umgeht, wenn
-als Eingabedaten belästigende, verleumdende, rassistische Vokabeln eingegeben (und damit anderen Benutzern sichtbar gemacht) werden
-die Datenbank mit sinnlosen Daten zugespamt wird
-massenhafte Anfragen an die Datenbank gerichtet werden und der Server dadurch in die Knie gezwungen wird
etc.

Es ist ein leichtes für mich, den Onlinedienst sofort zu deaktivieren, die Programminstanzen können dann eben keine Vorschläge mehr anbieten. Besser wäre, dem einzelnen Übeltäter Einhalt zu gebieten oder solche Dinge zumindest zu erschweren.
Über Filter könnten Daten aussortiert werden, pro Client könnte die Zahl der Zugriffe pro Zeiteinheit begrenzt werden. Ich habe auch überlegt, daß jede Programminstanz sich eine ID holen muß, die dann bei jedem Datenbankzugriff mitgeschickt werden muß. Zugriffe einer bestimmten ID könnten dann geblockt werden. Freilich ist diese Vorgehensweise nicht 100% sicher und kann geknackt werden. Benutzer-Accounts kommen nicht in Frage, dafür sind Benutzer zu bequem.

Mich interessieren hierzu eure Gedanken und Vorschläge, auch ganz allgemeiner Art.

Danke!


----------



## Empire Phoenix (27. Apr 2011)

Hm eintweder du hast eine art von Id die virtuell (Benutzeraccount ect) ist, oder du generierst dir eine aus der Hardware (32/64 bit, betreibsystem, ect) Ip adressen sind ja aus nahliegenden Gründen nicht möglich.

Man könnte auch eine art abstimmsystem machen, wenn ich nen vorschalg mache wird der unter vorbehalt eingetragen und die anderen user können dann voten ob der permanent gemacht wird oder entfernt wird.


----------



## Gelöschtes Mitglied 9001 (27. Apr 2011)

Eine ID zu generieren wäre sicherlich möglich. Aber wer die Kommunikation zwischen Client und Server belauscht, könnte einfach einen eigenen Client schreiben, der selbst eine bliebige ID einsetzt und dann die Datenbank zumüllt. Mein Server würde denken, es handele sich um eine von meinem Programm generierte ID. Besser wäre, wenn die ID in einer Tabelle auf dem Server liegen würde und nur registrierte IDs hätten Zugriff. Nur muß jede Programminstanz aber erstmal so eine ID bekommen. Der Server könnte ihm beim ersten Zugriff eine ID zuteilen. Aber auch hier kann er ja nicht wissen, daß sich hinter dem Client mein Programm verbirgt. Es könnte auch ein anderes Programm sein. Vielleicht sollte der Server dem Client ein paar Testfragen stellen. Erst die richtigen Antworten machen ihm glaubhaft, daß er mit meinem Programm spricht. Gibt es für so etwas Algorithmen (oder Suchbegriffe für Google?)?


----------

