Laden...

Silverlight Dienste nur für mein Projekt erlauben

Erstellt von mygil vor 12 Jahren Letzter Beitrag vor 12 Jahren 990 Views
M
mygil Themenstarter:in
124 Beiträge seit 2009
vor 12 Jahren
Silverlight Dienste nur für mein Projekt erlauben

Hallo!

Habe folgende Frage: Und zwar habe ich eine kleine Silverlight-Anwendung ertellt. Diese greift mir auf selbsterstellte Webservice (WCF) Dienste zu.

Das ganze klappt bestens. Nur habe ich jetzt das Programm inkl. dem Webservice auf einen IIS gepublished. Funktioniert immer noch bestens.

Aber jetzt kann jeder auf meine Dienste direkt zugreifen?!
Wie kann ich verhindern, dass jemand einfach mein Service in sein Projekt einbindet und ausführt?

Vielen Dank für eure Hilfe!!!

1.130 Beiträge seit 2007
vor 12 Jahren

Erschweren ist möglich, aber ganz verhindern kann man es nicht.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

M
mygil Themenstarter:in
124 Beiträge seit 2009
vor 12 Jahren

Dann habe ich offensichtlich einen gröberen Fehlere gemacht...
Eigentlich möchte ich nur eine Silverlight-Anwendung haben, die mit MSSQL Daten arbeitet. DAfür habe ich WCF Dienste erstellt...

Was hätte ich stattdesse machen müssen? Sodass nur meine Anwedung auf die Daten meines SQL Servers zugreift?

lg myGil

C
1.214 Beiträge seit 2006
vor 12 Jahren

Die Technologie spielt keine Rolle. Sobald du eine verteilte Anwendung baust und keinen Einfluß über die Verbreitung des Clients mehr hast, kannst du nicht mehr 100% verhindern, dass jemand deinen Client umgeht und anderweitig auf die Daten zugreift. Das ist ein konzeptionelles Problem. Du kannst es höchstens erschweren, aber gänlich verhindern kannst du das nicht. Das alles wurde schon oft besprochen.

M
mygil Themenstarter:in
124 Beiträge seit 2009
vor 12 Jahren

Also dass verstehe ich jetzt überhaupt nicht...

Es gibt doch viele Web-Anwendungen die genau das machen was ich brauche:
Z.b. Netbanking von der Sparkasse (http://www.s-netbanking.at/)
Da meldet man sich doch auch über seinen einen Login an und kann Überweisungen etc. tätigen. Aber ich hoffe wohl, dass niemand die Funktionen selbst irgendwie anderwertig aufrufen kann ODER?

Ich möchte nur eine ganz einfache Anwendung schreiben, die halt serverseitig arbeitet aber nur meine Anwendung die Funktion am Server nutzen kann!

Das muss doch irgendwie gehen oder?
DANKE für eure Hilfe!
lg Gilbert

C
1.214 Beiträge seit 2006
vor 12 Jahren

Aber ich hoffe wohl, dass niemand die Funktionen selbst irgendwie anderwertig aufrufen kann ODER?

Natürlich. Man könnte die Kommunikation/den Client reverse engineeren und eine eigene Software schreiben, die mit dem Server kommuniziert. Dagegen kann sich auch die Sparkasse nicht schützen. Wogegen man sich aber schon schützen kann, ist dass der Service missbraucht wird. Hier sollte der Server aber eine klare und wohl definierte API bieten und alles serverseitig validieren. Dann kann dir im Endeffekt auch egal sein, mit welchen Client jemand drauf zugreift, du weißt dann, dass er trotzdem nur das machen kann, was er auch machen darf.

M
mygil Themenstarter:in
124 Beiträge seit 2009
vor 12 Jahren

Was genau meinst du mit:

Wogegen man sich aber schon schützen kann, ist dass der Service missbraucht wird. Hier sollte der Server aber eine klare und wohl definierte API bieten und alles serverseitig validieren. Dann kann dir im Endeffekt auch egal sein, mit welchen Client jemand drauf zugreift, du weißt dann, dass er trotzdem nur das machen kann, was er auch machen darf.

Ich könnte z.b. jeder Webservice-Funktion die Login-DAten mitschicken und in jeder Funktion jedesmal die Login-DAten überprüfen bevor etwas passiert.
Meintest du sowas?

lg Gilbert

C
1.214 Beiträge seit 2006
vor 12 Jahren

So in der Art, wobei das jetzt nicht unbedingt sinnvoll ist. Du musst Authentifizierung und Autorisierung unterscheiden. Die Authentifizierung braucht nur einmal zu erfolgen. Danach muss der Benutzer eine gültige Session haben, um irgendwas ausführen zu können. Das macht man am besten nicht selber, sonder verlässt sich auf etablierte Frameworks, wie WCF, weil da kann man einiges falsch machen, wenn man das selber implementiert.
Die Autorisierung erfolgt dann anhand der Session und der Regeln, die du definiert hast. Ein grober Fehler wäre, Benutzerrechte clientseitig zu prüfen und sich auf dem Server darauf zu verlassen, dass der Client schon weiß, was er tut. Aber ich hoffe, das machst du nicht. Deine Schnittstelle darf halt keine Möglichkeit bieten, irgendwelchen Unfug zu treiben, den man mit dem offiziellen Client nicht treiben könnte. z.B. die Datensätze anderer Benutzer einsehen oder im Namen anderer Benutzer irgendwelche Aktionen ausführen. Die Schnittstelle sollte möglichst schmal sein und sich intern alle Daten selbst besorgen, und nicht vom Benutzer übergeben lassen, wenn nicht unbedingt notwendig. Und alle Benutzereingaben genauestens validieren. Das sollte dann eigentlich reichen und du brauchst dir auch keine Sorgen darum machen, dass jemand deinen Client umgeht.