C# Einen Update Check implementieren

Magic1416

Lieutenant
Registriert
Dez. 2003
Beiträge
530
Hallo zusammen,

ich habe hier meine fast fertige Winforms Application. Dieser möchte ich nun einen Updatecheck spendieren. Sie soll dabei, sofern vom User aktiviert, auf dem Webserver nachsehen, ob es ein Update gibt und dann ein PopUp zeigen.

Allerdings habe ich keine Ahnung von Web Servern (hat mich nie interessiert) und kann deshalb meinem Web Administrator nicht mitteilen, was ich eigentlich technisch gesehen von ihm am besten brauche.

Daher meine Frage an Euch:
- Welcher technische Weg ist der sinnvollste ?
- Was muss ich auf dem IIS implementieren lassen ?
- Welche Schnittstelle bzw. Protokoll soll ich für den Zugriff auf den Webserver verwenden ?

Am Ende, so stelle ich mir das vor, werd ich dann einfach die passende Funktion in meine Winform Application implementieren, die irgendeinen Wert am IIS abholt, diesen vergleicht z.b. mit der internen Programmversion und dann bei bedarf eben das PopUp zeigt.

Vielen Dank für Eure Infos
Gruß Magic
 
Im einfachsten Fall legst Du einfach eine Textdatei auf dem Server ab, so dass Sie über den IIs ausgeliefert werden kann, die nur eine Zahl beinhaltet. Die Datei kannst Du testweise auch per Browser aufrufen. Die Datei musst Du bei einer neuen Software Version manuell editieren.

In Deiner Applikation rufst Du die Datei per HttpRequest, WebRequest, WCF oder wie auch immer ab.
 
Oder du startest einfach den Browser mit der URL und gibst als Parameter die aktuelle Version mit, bspw. http://xyz/update.php?v=1.0.2.3. Musst dann natürlich n Script online ablegen, der die gegebene Version mit der Aktuellen vergleicht und die richtige Meldung ausgibt.

Find ich persönlich den schöneren Weg und ebenso wäre das der Einfachere, da somit die komplette Update-Funktionalität wegfallen kann.
 
Das mit dem Browser bietet sich aber nur für einen manuellen Updatecheck an.
Bei einem automatischen wäre es sich sicher lästig, wenn bei jedem Start erstmal der Browser aufpopt.
Dann lieber im Hintergrund checken entweder über die Textdatei oder über ein kleines Script, was einem am Ende nix oder die aktuelle Versionsnummer ausspuckt, wenn was neues verfügbar ist.
Und das möglichst über https.
 
Die Vorschläge halte ich für viel zu simpel. Was ist mit Authentifikation? Wie verhindert man, dass dem Programm ein manipuliertes Update untergeschoben wird? Das ist nicht trivial. :/
 
Solange er nur eine Benachrichtigung und kein volles Auto-Update implementieren will, ist keine Authentifizierung nötig.
Er will ja nur die neuste Versionnummer haben. Die ist kein Betriebsgeheimnis und steht ja in der Regel groß und fett auf der Homepage für alle Interessierten sichtbar. Da ist es kein Sicherheitsverlust, wenn diese Nummer per Web-Request direkt von jedem abrufbar ist.
Der Einzige, der sich hier authentifizieren muss, ist der Server und das sollte bei https gewährleistet sein, wenn man keinen gefaketen Zertifikate-Check implementiert, wie es viele gerne machen.
 
Die Vorschläge halte ich für viel zu simpel. Was ist mit Authentifikation? Wie verhindert man, dass dem Programm ein manipuliertes Update untergeschoben wird? Das ist nicht trivial. :/
Ich wollte ähnliche Bedenken äußern. Wenn mal der Server gehackt wird und sich haufenweise Leute dann wegen dieses Hacks ein Fake-Update laden, ist das Geschrei groß.

Man könnte die Version in eine Textdatei zu schreiben und die per RSA signieren. Im Client das ganze dann runterladen und die Signatur überprüfen. Dass der Client den Public Key mit sich rumschleppt, ist ja kein Problem, dafür ist er ja da.

Bewahrt natürlich niemanden davor, trotzdem manuell ein gehacktes Programm runterzuladen...
 
Naja, wenn du deinem Angreifermodell die Moeglichkeit gibst deinen Server zu komprimitieren hast du aber auch noch andere Probleme.
Wenn jemand Computerbase hackt kann er dir auch 'neue' Software unterjubeln.

Aber eine Signaturloesung ist sicher trotzdem nicht verkehrt, wuerde ich auf jeden Fall machen.
 
Dass ein Webserver leichter kompromittiert wird als der Rechner des Entwicklers ist ja wohl klar und von daher macht es auf jeden Fall Sinn die Liste der Versionen und die Updates selbst zu signieren.
 
Warum so kompliziert, in Visual Studio bei den Projekteigenschaften Signierung->"ClickOnce-Manifeste signieren" und dann bei Veröffentlichen->Updates->"Die Anwendung soll nach Updates suchen", dann noch auswählen wann/wie oft und fertig. Durch die Signierung kann auch kein anderer ein gefälschtes Update unterjubeln falls der Upload-Server kompromitiert werden würde. :)
 
Hi,
erstmal danke für die vielen Infos. Es ist einiges Hilfreiches dabei. Die Info von @lynxx gefällt mir aktuell am besten. Die Methode werde ich mir genauer ansehen, wie das so im Detail funktioniert.

Gruß Magic
 
Zurück
Oben