Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Mi 03.08.16 20:39 
Hallo Community,
ich habe eine Idee. Wenn man sich über ein Netzwerk anmeldet, soll man die Software als Vollversion bekommen. Diese Kundendaten müssen aber nun serverseitig irgendwie gespeichert werden. Ich hätte es jetzt so gemacht, dass eine Email mit den Daten losgeschickt wird, aber das ist blöd, da es per Email keinen Primary key gibt.

Nun meine Frage: kann man eventuell einen kostenlosen Server hosten, der als Kundendatenbank dient? Ich muss dann aber auf die Datenbank zugreifen können, um die Kundendaten einsehen zu können.
Geht das überhaupt kostenlos? Und muss man dafür einen SQL Server installieren?
netzwerk
Einloggen, um Attachments anzusehen!
_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1151
Erhaltene Danke: 147

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Do 04.08.16 00:24 
Kostenlos:
Ja, wenn Du einen Zuhause rum stehen hast :P
So ein Server kostet Geld und das nicht zu knapp, dazu kommt noch die Wartung, die auch nicht ganz billig ist.

Kundendaten per Email schicken:
Warum EMail? Dafür wurde das nicht gemacht, Du baust nur Murks zusammen, der mehr Overhead drum herum braucht, als eigentlich nötig.
Warum kein FTP-Upload der Daten?
Oder Du schickst eine POST-Anfrage an den Server, wo Du die Daten mit schickst.
Beides habe ich aber bisher nur mit PHP und JavaScript gemacht und das ist auch schon etwas her.

Brauchst Du einen SQL-Server:
Nein, wie Du die Daten ablegst ist deine Sache, kann auch eine CSV-Datei pro Kunde sein.
Ist ein SQL-Server sinnvoll? Das ist ganz andere Geschichte, ich denke aber, mit einem SQL-Server ist man immer auf der sicheren Seite.


Wenn der Server nur sowas wie Registrierungsdaten sammeln soll, dann würde ich mir dazu einen Linux-Server mieten.
MySql-Server gibt's kostenlos und das entgegen nehmen von Kundendaten bzw. raus schicken ist mit PHP ziemlich schnell gemacht. Für die Verschlüsselung gibt's auch genug Möglichkeiten.


Zitat:
da es per Email keinen Primary key gibt

Der Primary Key auf der Datenbank?
Den gibts überall, musst Du nur mit schicken, schließlich ist das auch nichts anderes als ein einfacher Wert, der eben eindeutig sein soll.
Der muss dann auf dem Server nur entsprechend beachtet werden und das läuft bei PHP grob betrachtet nicht sehr viel anders als bei C#.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 04.08.16 08:34 
Stimmt. Die Sache mit dem FTP Server gefällt mir schon ganz gut. Man könnte den Dateinamen als PrimaryKey verwenden. Dann überprüfen, ob es diesen schon gibt...

Darauf bin ich nicht gekommen. Danke :)

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1151
Erhaltene Danke: 147

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Do 04.08.16 08:41 
Brauchst Du überhaupt FTP?

Wenn die Daten kein komplexes Format haben, also bzw. nur Benutzer-Daten in Form einer Liste beinhalten, dann würde ich das per POST-Anfrage zum Server schicken.
Da kannst Du dann beliebige Daten mit schicken, z.B. so: .NET: Simplest way to send POST with data and read response

Das ist auch seitens PHP leichter anzunehmen.
Da brauchst Du nur die $_POST-Variable nutzen, da hast Du dann wieder die Daten
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 04.08.16 09:06 
Aber wo werden die Daten dann mit der POST Anfrage abgespeichert?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1151
Erhaltene Danke: 147

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Do 04.08.16 09:18 
Gar nicht, musst Du machen
Musst Du bei FTP aber auch machen
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 04.08.16 09:25 
Aber wenn ich einen FTP-Server miete, bekommt dieser Server ja eine Domain wie server...

Dann kann ich ja die Methode upload Data auffufen, um Dateien auf den Server zu spielen, oder?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1151
Erhaltene Danke: 147

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Do 04.08.16 09:32 
Ich muss gestehen, ich weiß nicht genau, wie das da gemacht wird
Aber ich weiß, dass Du dir die Daten vorher nochmal anschauen solltest, sonst kann ja jeder Idiot alles hoch laden ;)
Und da ist denke ich die POST-Anfrage besser geeignet.

Das wird glaube auch in den meisten Fällen so gemacht. Meldet sich irgendwer irgendwo an, wird eine POST-Anfrage mit den optimalerweise auch verschlüsselten Daten an einen entsprechenden Registrierungs-Server geschickt. Der nimmt die dann entgegen, prüft sie gegen und legt sie dann in der Datenbank ab. Das Gleiche auch beim Login, nur dass da nicht gespeichert wird, sondern nur gesagt wird ob die Daten so in der Datenbank stehen oder nicht.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 04.08.16 10:03 
Wenn ich mir den Quellcode von der POST Anfrage mal so ansehe, sieht es so aus, als ob die Daten auf einer Website gespeichert werden.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
byte[] response = Http.Post
(
    url: "http://dork.com/service",
    contentType: "application/x-www-form-urlencoded",
    contentLength: 32,
    content: "home=Cosby&favorite+flavor=flies"
);


Da wird ja eine Verbindung mit einer Website hergestellt, und dann darauf irgendwelche Daten gespeichert, oder? Wenn ja, dann ich dies doch irgendwie unsicher, oder verstehe ich das falsch?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1151
Erhaltene Danke: 147

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Do 04.08.16 10:58 
Du kannst nicht einfach auf irgendeine Website Daten abspeichern.

Wenn Du eine Website öffnest, dann passiert im Hintergrund folgendes:
Der Web-Broser schickt eine Anfrage zu dem Server und liefert einige Variablen mit, die weitere Informationen wie z.B. die Browser-Version beinhalten.
Unter diesen Variablen finden sich auch die Variablen $_GET und $_POST
$_GET beinhaltet in Form einer Key-Value-Zuordnung die Daten, die in der URL hinter dem Fragezeichen stehen, getrennt durch das kaufmännische Und-Zeichen. Ich hab z.B. aktuell da stehen: mode=reply
$_POST ist im Prinzip das gleiche, nur dass der User die Inhalte nicht so einfach über die URL angeben kann, sondern die Daten nicht direkt sichtbar sind. Das kann genutzt werden, wenn z.B. die Website Informationen zum Server schicken will.

Auf dem Server dagegen passiert genau nichts, der würde die Anfrage abweisen.
Zumindest wenn Du keine entsprechende URL verfügbar machst, z.B. indem Du eine Datei unter dem Pfad mit dem Namen an gibst.
Ist das eine PHP-Datei, ist da dann alles offen, was mit den mit geschickten Daten passiert. Ob Du die nun verwendest um eine Datei zu schreiben, was in der Datenbank zu aktualisieren oder eine Website anzuzeigen ist völlig egal. Du kannst aber auch Daten zurück schicken, damit der Client auch eine Antwort erhält. Du kannst auch eventuell zurück geschickten HTML-Code abfragen und anzeigen, das würde der Browser tun.



Es ist auch nicht pauschal besonders sicher oder unsicher, die Anfrage zu stellen. Wie sicher das ist, hängt immer vom Server ab, wie der eingerichtet wurde, die die Daten übertragen werden und wie Du beim Annehmen der Daten damit umgehst. Es ist z.B. ein absolutes NoGo, sowas wie Login-Daten unverschlüsselt zu übertragen, das würde Firefox dir als Nutzer auch mit teilen.
Das Gleiche hast Du bei FTP aber auch, Du kannst die Daten verschlüsselt übertragen oder eben nicht und wie die Daten angenommen werden, steht auch wieder auf einem anderen Blatt.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 04.08.16 20:26 
Naja mit Logindaten wird das erstmal nichts. Ich hätte einen Laptop noch, den ich relativ selten benutze. Kann man den irgendwie als FTP Server einrichten, und die Daten auf meiner externen Festplatte abspeichern? Dann könnt ich von zu hause darauf zugreifen. Das Problem ist aber, dass ich dann Angst habe, gehackt zu werden.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1151
Erhaltene Danke: 147

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Do 04.08.16 20:31 
Klar geht das, wie musst Du aber selber heraus finden, da kenne ich mich nicht aus.
Auch bei der Sicherheitsfrage kann ich nicht helfen, aber ich wette, da gibt's mehr als genug Hilfe im Internet

Abgesehen davon: Was will denn jemand mit deinem Laptop? :D
Solange Du die IP-Adresse oder URL nicht öffentlich zugänglich machst, wird da wohl keiner so schnell drauf aufmerksam. Zum Testen reicht das also denke ich völlig aus.


PS:
Aber Du kannst anfangs ja regelmäßig die Logs kontrollieren.
Ich weiß nicht, wie oft die Anfragen kommen, wenn das nicht so viele sind, dürften unerwartete Anfragen recht schnell auffallen.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 04.08.16 22:21 
Okay. Dann würde ich es erstmal ohne FTP Server versuchen. Aber ich verstehe das überhaupt nicht, wie das mit der Website funktioniert. Kannst du mir das vielleicht genauer erklären?
Pro "Kunde" soll eine XML Datei erstellt werden, die auf einem Server gespeichert wird. Der Dateiname der XML Datei soll dann die Kundennummer (die es nur einmal geben soll) beinhalten. Ich möchte dann aber alle Daten einsehen können.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1151
Erhaltene Danke: 147

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Do 04.08.16 23:16 
Ich werde dir hier jetzt bestimmt keinen "Wie richte ich einen Server ein und programmiere PHP"-Crashkurs geben, das können andere besser :D
Aber irgendwoher muss ich mein Wissen ja auch haben, die Community rund um Linux, Apache, PHP und MySql ist riesig, es gibt auch ein paar Seiten, denen Du immer wieder begegnen wirst, weil die wirklich hervorragende Dokumentationen, Tutorials, etc. bieten. Ich würde sogar behaupten, dass es in diesen Bereichen mehr Material und vor allem auch besseres Material gibt, als für die .NET-Welt.


Aber trotzdem in ganz super kurz:
Ich kenne es unter Linux mit Apache und MySql

- Apache installieren
- Den automatisch angelegten html oder http-Ordner suchen (oder in der Config nach schauen, Doku-Material dazu gibt's sehr viel)
- Darin liegt eine HTML-Datei mit einer simplen Vorschau-Seite, die auch angezeigt werden kann
- Die HTML-Datei löschen und stattdessen eine PHP-Datei erstellen
- In die PHP-Datei folgendes rein schreiben:

ausblenden PHP-Quelltext
1:
2:
3:
<?php
var_dump($_GET);
?>


- Die URL "127.0.0.1/MyPhpFile.php?Field1=Value1&Field2=Value2" aufrufen und staunen

Wie das ganze mit der POSt-Variable geht, steht im Link, den ich gepostet habe. Aber nicht in der Frage, man sollte sich auch mal die Antworten dazu durchlesen, da stehen meistens die klugen Sachen. ;) Da wird nämlich auch eine fast schon lächerlich einfache Variante gezeigt, Daten an einen Server zu schicken.
Datei-Upload sieht da aber etwas anders aus, da musst Du dich mal schlau machen, das weiß ich jetzt aus dem Kopf auch nicht.

Wie Du die Daten weiter verarbeitest, ist auch wieder was anderes. Ich persönlich bin kein Fan von dateibasierter Datenhaltung, wenn das keine großen Probleme macht oder dateibasiert sein muss, würde ich immer die Datenbank nehmen.
Für PHP gibt es eine hervorragende Dokumentation und die wirst Du auch brauchen, da PHP schwach typisiert ist und eine Methode nicht zwangsläufig immer das gleiche bekommt oder zurück gibt. Und es gibt für jeden Mist irgendwo Tipps, Snippets, Frameworks, etc.
Genauso auch für MySql



Zwei Seiten, die Du lieben lernen wirst:
wiki.ubuntuusers.de/Apache/
php.net/manual/de/mysqli.quickstart.php



PS:
Installier dir eine Linux-VM und probier da einfach rum. Solange die VM nicht von außen antelefoniert werden kann, kann dich auch niemand hacken und selbst wenn: Es ist nur eine Test-VM :D
Ich nutze dafür gerne VirtualBox. Die kostenlose (nicht kommerzielle) Version kann Snapshots, dann kannst Du die zurück spielen, wenn Du das Linux kaputt gespielt hast
Den Server kannst Du dann auch bequem auf dem Host-Rechner testen. Unter VirtualBox kannst Du einstellen, dass nur der Host die VM im Netzwerk sieht und die VM bekommt über den Host Internet-Zugang, was Du auch brauchst, da es das Installieren von Programmen auf Linux deutlich einfacher macht - einfacher als unter Windows

Ach ja: Gewöhn dich am besten gleich an die Konsole, Du wirst da immer wieder mal was mit machen müssen, also am besten gleich alles.
Anfangs hab ich mich da schwer getan, allerdings ist die Konsole unter Linux deutlich (!!!) flexibler als die von Windows und Du hast dort extrem viele Möglichkeiten. Es gibt sogar ein Tool, was dir in der Konsole einen grafischen Datei-Explorer baut: Midnight Commander
Nach etwas Eingewöhnungszeit und der Hilfe von wiki.ubuntuusers.de gewöhnt man sich da aber schnell dran, dann macht's richtig Spaß ^^
Ich kann zu Linux und der Art, wie man damit arbeitet eigentlich nur sagen: Top :zustimm: Wenn ich dann nicht auf so viele Programme verzichten müsste, würde ich direkt umsteigen.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 25.08.16 15:33 
Okay, ich habe mich jetzt entschieden, einen FTP Server zu mieten.
Nun habe ich eine Frage: Um an die Daten zu gelangen, braucht man ja ein Passwort. Wenn ich aber das Serverpasswort in dem Programm mitliefere, hab ich "Angst", dann man es auslesen (decompillieren) kann. Gibt es vielleicht eine andere, sicherere Variante, um das Passwort als Parameter einer Methode mitzugeben?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 28.08.16 17:50 
Oder kann ich von einem Rechner einen SQL Datenbankserver hosten? Ich habe heute nämlich gehört, dass FTP sehr unsicher ist und Datenbanken sind ja darauf spezialisiert, eine ganze Menge von Daten aufnehmen zu können. Geht das irgendwie, dass ich meinen Rechner als SQL Datenbankserver hoste?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4262
Erhaltene Danke: 851


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 28.08.16 18:17 
Zitat:
Oder kann ich von einem Rechner einen SQL Datenbankserver hosten?

Ich vermute mal eine rein rhetorische Frage?

Zitat:
Ich habe heute nämlich gehört, dass FTP sehr unsicher ist und Datenbanken sind ja darauf spezialisiert, eine ganze Menge von Daten aufnehmen zu können.

Was hat Sicherheit jetzt mit Datenmenge zu tun? Ein direkt ansprechbare Datenbank ist erstmal genauso sicher/unsicher wie FTP. Sobald dir Credentials für ein Protokol abhanden kommen kann ein Angreifer alles tun was dieses Protokoll zulässt (bei FTP alles leerräumen, bei einer Datenbank die DB löschen). Wenn du mehr Sicherheit willst musst du eine dezidierte Anwendung mit einer dezidierten Schnittstelle auf einem Server bereitstellen. Wenn dann Zugangsdaten ~verloren~ gehen ist nur die bereitgestellte Funktionalität nutzbar aber nicht einfach alles. Das wäre ien tatsächlicher Sicherheitsgewinn.

Zitat:
Geht das irgendwie, dass ich meinen Rechner als SQL Datenbankserver hoste?

Ob es jetzt dein Rechner ist, der Rechner eines Freundes oder ein irgendwo gehosteter PC natürlich geht das. Ein Rechner ist ein Rechner ist ein Rechner.
Die eigentliche Frage ist macht das Sinn? Da kommt es dann auf den Kontext deiner Anwendung an den wir nicht kennen(Also z.B. wie kommen die Nutzer übers Netz an deinen Rechner, was sind das für Nutzer, wo sind die Nutzer, wie viele Nutzer hast du vorraussichtlich, wann brauchen die Nutzer diesen Dienst, wie viele Daten schieben durchschnittlich hin und her, was für einem Sicherheitsanspruch muss dem genügen u.s.w.) viel zu viele Fragen die offen sind. Und ein einfaches immer gültiges A ist besser als B gibt es nicht (in unserem Geschäft sowieso niemals).
Im allgemeinen macht es üblicherweise keinen Sinn irgendeinen Rechner zu nehmen sondern je nach notwendiger Erreichbarkeit (lokales Netz, Internet, VPN etc.) will man einen dezidierten Rechner in der passenden Sicherheitszone.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 28.08.16 19:11 
Also letzendlich möchten wir unser eigenes Netzwerk aufbauen. Über dieses Netzwerk sollen die User unseres Programms E-Mail Newsletter bekommen und [später] auf unserer Website zugreifen können. Und diese Anmeldedaten, Name usw. der User müssen nun irgendwie Serverseitigt gespeichert werden. Wie viele sich dort anmelden, kann ich pauschal nicht sagen, ich rechte aber so um die 75. Der Rechner, der die Daten speichern soll, befindet sich in einem Heimnetzwerk, was von einem Router gesteuert wird.

Wie die Daten letzendlich gespeichert werden, ich meiner Meinung nach sekundär, hauptsache die Daten werden (relativ) sicher auf dem PC gespeichert. Die Daten werden (vorraussichtlich) nur versenden der Newsletter und zur Anmeldung auf unserer Website gebraucht. Eventuell kann man dieses Netzwerk später weiter ausbauen.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4262
Erhaltene Danke: 851


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 28.08.16 20:00 
Wenn du eh einen Webserver brauchst dann kannst du da auch einfach eine simple Webanwendung mitlaufen lassen die deine Kundendaten entgegen nimmt (egal ob die jetzt direkt http(s), rest, soap oder was auch immer spricht). Wo die dann die Kundendaten ablegt in einer DB, einem File oder oder ... egal.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 28.08.16 20:18 
Was genau ist eine Webanwendung? Einfach ein Programm, was 24/7 auf dem Server läuft und dann die Daten abspeichert, oder wie?
Ich habe schonmal nach ein paar Webhosting Angeboten geguckt und bin nur auf FTP uns MySQL gestoßen, aber heute habe ich erst gehört, dass FTP relativ unsicher ist. Und das Programm dann vollautomatisiert auf den FTP Server zugreift, muss ich im Quellcode ja das Passwort für den Server mitgeben und da weiß ich nicht, ob man auch ohne SourceCodes irgendwie an den Quellcode herankommt.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein