Laden...

Online-Spiel - Unlösbare Probleme durch wenig Spielraum? (MySQL)

Erstellt von Jack_AI vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.173 Views
J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren
Online-Spiel - Unlösbare Probleme durch wenig Spielraum? (MySQL)

Hallo.

Ich möchte gerne testweise ein kleines Online-Spiel programmieren.

Ich wollte das so realisieren, dass alle Programme auf eine gemeinsame MySQL-Datenbank auf einem angemieteten Webspace zugreifen. Jedoch türmen sich langsam die Probleme, sodass ich mit dem Gedanken spiele, das Datenbank-Problem komplett anders anzugehen - aber wie?

Meine Probleme, die ich mit MySQL habe:

  1. Ich kann die Verbindungen zur Datenbank nicht verschlüsseln. Der Webspace hat kein SSL installiert. (Wenn jemand an mein DB-Passwort kommt, ist das Projekt gelaufen...) Ich könnte alternativ versuchen, Daten verschlüsselt an ein PHP-Skript auf meinem Webspace zu schicken und dann dort zu entschlüsseln und an die DB zu schicken. Viel Aufwand, zumal meine selbstgemachte Verschlüsselung sehr unsicher ist.
  2. Ich kann per MySQL Connector auf die Datenbank zugreifen, aber ich muss die MySQL-dll mitgeben.
    (3. MySQL kostet anscheinend was, für den Fall, dass ich mein Spiel kommerzialisiere. Vorerst aber nebensächlich.)

Warum ich also hinaus will:

Finanziell habe ich wenig Spielraum. Am besten wäre es, wenn mir hier jemand helfen könnte, meine bestehenden Probleme irgendwie zu lösen. Sollte das aber nicht möglich sein, wäre es toll, wenn jemand eine andere möglichst kostengünstige und einfache Lösung hätte, um mein Projekt realisieren zu können. Möglicherweise, durch einen Datenbank-Wechsel.

Ich hoffe, jemand hat eine zündende Idee und ist bereit, mir weiter zu helfen. Ich bin arm.

Danke,
Jack

R
317 Beiträge seit 2006
vor 16 Jahren

Hi,

. Ich kann die Verbindungen zur Datenbank nicht verschlüsseln. Der Webspace hat kein SSL installiert. (Wenn jemand an mein DB-Passwort kommt, ist das Projekt gelaufen...) Ich könnte alternativ versuchen, Daten verschlüsselt an ein PHP-Skript auf meinem Webspace zu schicken und dann dort zu entschlüsseln und an die DB zu schicken. Viel Aufwand, zumal meine selbstgemachte Verschlüsselung sehr unsicher ist.

Du könntest auf dem Server einen Webservice installieren / programmieren, auf den du dann von deiner Software aus zugreifst. Nur der Webservice hat dann direkten Zugriff auf die Datenbank. Somit ist das Passwort der Datenbank vom User versteckt, und der kann da auch nicht draufkommen.

  1. Ich kann per MySQL Connector auf die Datenbank zugreifen, aber ich muss die MySQL-dll mitgeben.

Sollte eigentlich mit einem Installer kein Problem sein. Wenn du .NET Programme weitergibst, wirst du sowieso einen Installer benötigen, der auch auf das .NET Framework und MDAC prüft. Daher sollte die eine DLL auch kein problem darstellen. Notfalls könnte man Sie in die Exe-Datei einbinden (- Forumsuche)

Hoffe die Antworten für die 2 Punkte haben etwas geholfen 🙂

Mfg,
Daniel

3.511 Beiträge seit 2005
vor 16 Jahren

Hallo,

würde es auch wie robbyrc geschrieben hat machen. Jeder Methode im WebService kann dann z.B. als ersten Parameter immer eine eideutige ID sein (GUID), mit der geprüft wird, ob der Client der gerade an den WebService will, überhaupt berechtigt ist. Wenn das zutrifft, bekommt der Client die Daten vom WebService und gut ist. Sprich, du müsstest (wie robbyrc schon geschrieben hat) das DB Kennwort nie durch die Gegend schicken.

  1. Ja, sobald du mySQL kommerziell einsetzen willst, werden Lizenzgebühren fällig.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Danke für eure Antworten, robbyrc und Khalid, allerdings ist die Geschichte mit dem Web Service nicht ganz so einfach, wenn nicht gar unmöglich. Es ging wahrscheinlich aus meinem Startbeitrag nicht klar hervor, aber ich kann auf dem Server nichts installiert; ich bin auf den Webspace beschränkt.

Daher habe ich auch langsam die Befürchtung, dass ich unbedingt einen eigenen Server für mein Vorhaben brauche. Was aber aus Kostengründen nicht geht. 🙁

Danke,
Jack

3.511 Beiträge seit 2005
vor 16 Jahren

Man kann WebServices auch in PHP schreiben, die wunderbar mit .NET harmonieren. Bei PHP 4, gibt es in der PEAR Library (so heißt die IMHO) Klassen für WebServices. Und ab PHP 5, sind die WebService Klassen alle bereits integriert. Schau bei Google einfach mal nach "PHP WebService".
Sollte ein paar Treffer ergeben.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

C
89 Beiträge seit 2005
vor 16 Jahren

Ich bin auch gerade dabei eine Anwendung für einen kleinst Betrieb zu schreiben, in der die MySQL-DB des Webspaces benutzt werden soll. Meine Lösung des Problems um Zugriff auf die Daten zu erhalten ist ein PHP-Webservice (SOAP). Es ist zwar sicherlich nicht ganz so komfortabel, wie ein .NET-Webservice, vor allem, was die Typen angeht, aber via WSDL und Complex Types funktioniert das doch ganz gut.

Unter PHP5 ist SOAP integriert, aber bietet noch keine Möglichkeit um automatisch WSDL-Schemas zu erstellen, daher bin ich bei NuSOAP (läuft auch unter PHP4) hängengeblieben. Ist recht einfach damit zu arbeiten und auch relativ wenig Schreibaufwand, wenn man es mal mit der von handgeschriebenen WSDL-Datei vergleicht 😉

Ganz netter Artikel: http://sanity-free.org/article25.html
Und hier gibt's NuSOAP: http://sourceforge.net/projects/nusoap/

3.511 Beiträge seit 2005
vor 16 Jahren

Das Ding kannte ich noch gar nicht. Danke für die Links 🙂

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Danke erst mal für den Hinweis mit PEAR. Das könnte funktionieren...

...wenn mein Webspace da mitspielen würde. Ich habe versucht, PEAR auf meinem Webspace zu installieren, damit ich die benötigten fehlenden Pakete installieren kann. Die Installation hängt sich aber immer bei 30% auf. In den offizellen Foren ist das Problem zwar bekannt, aber es gibt wohl keine Lösung, wenn man nur eingeschränkte Server-Rechte hat. Damit scheint dieser Weg nicht weiter zu führen. Schade, denn diese Erkenntnis hat mich viel Zeit (Stunden!) und Nerven (ARGHH!) gekostet.

Am besten, ich steige bei Gelegenheit auf einen Webspace mit SSL-Unterstützung um. Dann müsste Connector mit aktiviertem "ENCRYPT=true" automatisch Daten verschlüsseln. Sehe ich das richtig?

Aber der Tipp mit PEAR war grundsätzlich sehr gut!

Jack

3.511 Beiträge seit 2005
vor 16 Jahren

Hast du mal den Tipp von Calexico weiter verfolgt? Ich habe gestern abend mal etwas mit den NuSOAP Komponenten rumgespielt, und war ziemlich begeistert, wie einfach das ging ein WebService in PHP zu stricken. Vorallem, weil ein das Ding die Arbeit mit den WSDL abnimmt. Bei PHP5, oder den Klassen aus dem PEAR müsstest du IMHO das WSDL selber zusammenbasteln.

Hatte mit den NuSOAP Komponenten innerhalb von 15min ein Testservice aufgebaut, der auch relativ flott war. Aber das muss ich mal weiter durchtesten, vorallem gegen die PHP5 Komponenten.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

C
89 Beiträge seit 2005
vor 16 Jahren

Hatte mit den NuSOAP Komponenten innerhalb von 15min ein Testservice aufgebaut, der auch relativ flott war. Aber das muss ich mal weiter durchtesten, vorallem gegen die PHP5 Komponenten.

Könntest Du die Ergebnisse Deines Testlaufs dann hier posten? Würde mich auch sehr interessieren... Mir fehlt nur leider im Moment die Zeit für solche Spielereien. NuSOAP läuft ja und falls NuSOAP gegenüber den PHP5-Hausmitteln verliert, kann man den Service und vorallem die WSDL-Datei ja mit NuSOAP entwickeln, dann einfach kopieren und die Bearbeitung den Standardmethoden von PHP5 überlassen... 😉

3.511 Beiträge seit 2005
vor 16 Jahren

Mir fehlt nur leider im Moment die Zeit für solche Spielereien

Mir im Prinzip auch. Deswegen werde ich die Tests aufs Wochenende verschieben. Aber ich poste die Ergebnisse hier auf jeden Fall dann.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Hast du mal den Tipp von Calexico weiter verfolgt? Ich habe gestern abend mal etwas mit den NuSOAP Komponenten rumgespielt, und war ziemlich begeistert, wie einfach das ging ein WebService in PHP zu stricken. Vorallem, weil ein das Ding die Arbeit mit den WSDL abnimmt. Bei PHP5, oder den Klassen aus dem PEAR müsstest du IMHO das WSDL selber zusammenbasteln.

Mein Webspace-Anbieter unterstützt kein PHP5, nur PHP4. Daher meine Idee mit dem Webspace-Wechsel.

Nur um noch mal nachzuhaken:

Am besten, ich steige bei Gelegenheit auf einen Webspace mit SSL-Unterstützung um. Dann müsste Connector mit aktiviertem "ENCRYPT=true" automatisch Daten verschlüsseln. Sehe ich das richtig?

Jack

3.511 Beiträge seit 2005
vor 16 Jahren

NuSOAP sollte eigentlich mit PHP4 funktionieren.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren
Daten-Verschlüsselung

Ich habe mich nun mit NuSOAP, etc. beschäftigt. Inzwischen rauben mir auch Webservices den letzten Nerv. 😁 Wie heißt es so schön: Aller Anfang ist schwer. Ich bin jetzt auf mehrere Beispiele für Webservices gestoßen, aber wirklich verstanden habe ich das noch nicht.

Ich glaube, für meine Zwecke reicht auch ein selbst erstelltes, kleines PHP-Script aus. Das Problem ist nur, dass ich bisher noch keinen Hinweis dazu gefunden habe, wie ich die zu übermittelnden Daten von meinem Programm verschlüsseln, und dann auf dem Webspace wieder entschlüsseln kann.

Das Problem ist, dass ich einen Verschlüsselungs-Algorithmus brauche, der sowohl von meinem Programm als auch vom PHP-Script beherrscht wird. Dazu habe ich im Forum einen interessanten Algorithmus gefunden. Nur weiß ich nicht, wie ich den Key generieren und wo ich ihn speichern soll. Schließlich muss der auch dem Webspace bekannt sein. Aber einen festen Key benutzen oder den Key mitzusenden scheint mir riskant.

Sorry, wenn meine Frage für Profis trivial sein soll, aber ich hänge schon seit Monaten an diesem Problem. Hat dazu jemand eine Idee?

Jack

B
1 Beiträge seit 2008
vor 16 Jahren

Hi

Habe hier vieleicht einen kleinen Tip, geh mal auf Bytecamp gucken die sind in meinen Augen sehr günstig und Server technisch wird einem dort auch alles geboten. Habe meine Seiten da nun schon seid einigen Jahren und noch nie wirklich probleme mit denen gehabt. Guckst einfach mal rein dann siehst ja ob es was für dich ist.

Gruss
Baltin

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Am besten, ich steige bei Gelegenheit auf einen Webspace mit SSL-Unterstützung um. Dann müsste Connector mit aktiviertem "ENCRYPT=true" automatisch Daten verschlüsseln. Sehe ich das richtig?

Neue Erkenntnis:

ENCRYPT: Ist diese Option true, wird für alle zwischen Client und Server übermittelten Daten SSL-Verschlüsselung verwendet, wenn auf dem Server ein Zertifikat installiert ist. Zulässige Werte sind true, false, yes und no. Hinweis: Dieser Parameter ist zurzeit wirkungslos.

Soviel zu dieser Idee...

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Okay, ich weiß nicht, ob dieses Thema noch jemanden interessiert. Ich fordere einfach mal mein Glück heraus...

Nachdem ich jetzt kläglich am Thema Kryptografie gescheitert bin, gebe ich das Thema vorerst auf. Jetzt geht es um Schadensbegrenzung.

Also, angenommen jemand hat mein Programm und liest aus dem Netzverkehr die Datenbankverbindung heraus. MySQL-Connector verschlüsselt zwar das Passwort (irgendwie), aber der Datenbank-Name, die IP-Adresse und die Befehle werden trotzdem angezeigt. Ist es wahrscheinlich, dass ein erfahrener Programmierer / Hacker das Passwort aus diesen Daten entschlüsseln kann?

Mfg,
Jack

K
593 Beiträge seit 2007
vor 16 Jahren

Ich weiß jetzt nicht wie man es in C# implementiert aber eigentlich wäre sowas dann für dich sinnvoll : Asymmetrisches_Kryptosystem: Wikipedia Weil du den Schlüssel zur entschlüsselung der Daten nicht weiter geben musst sondern nur den "Public Key" zum Verschlüsseln.

Gruß Daniel

3.511 Beiträge seit 2005
vor 16 Jahren

@Calexico:

Sorry, hatte am WE kine Zeit gehabt. Habe mal eben angefangen ein paar Tests zwischen NuSOAP und den SoapService in PHP5 zu basteln.

Ich habe also zwei WebServices erstellt, die ganz plump jeweils eine Methode hatten, die nichts weiter macht als:


public string Hello(string name)
{
  return "Hello " + name;
}

Natürlich jeweils die PHP Variante dazu.

In NuSOAP


function Hello($name)
{
  if($name == '')
  {
    return new soap_fault('Client','','Argument invalid');
  }
  return "Hello $name!";
}

Im SoapService


class ServiceClass
{
  function Hello($name)
  {
    return "Hello $name";
  }
}

Über VS2008 konnte ich ohne Probleme sofort die WebReferenzen hinzufügen.
Dann habe ich jeweils eine Methode geschrieben


private void button1_Click(object sender, EventArgs e)
{
  Service1.testwebservicePortTypeClient client = new Service1.testwebservicePortTypeClient();

  Stopwatch sw = new Stopwatch();
  sw.Start();
  for (int i = 0; i < 100; i++)
    client.Hello("Bla");
  sw.Stop();
  Console.WriteLine(sw.ElapsedMilliseconds.ToString());
}

private void button2_Click(object sender, EventArgs e)
{
  Service2.testwebservicePortTypeClient client = new Service2.testwebservicePortTypeClient();

  Stopwatch sw = new Stopwatch();
  sw.Start();
  for (int i = 0; i < 100; i++)
    client.Hello("Bla");
  sw.Stop();
  Console.WriteLine(sw.ElapsedMilliseconds.ToString());
}		}

Service1 ist der NuSOAP WebService und Service2 der PHP5 SoapService.

Im Schnitt ergaben die Aufrufe die Ergebnisse
Service1: 6900-7100ms
Service2: 500-600ms

Dieser Test ist zwar noch nicht wirklich der perfekteste. Aber ehrlich gesagt habe ich dann erstmal nichts weiter gemacht. Wären die Unterschiede minimal, also so um die 100-200ms, dann hätte ich jetzt angefangen Arrays durch die Gegend zu schmeißen. Aber alleine schon bei solch einer "stumpfen" Methode schon über 6 Sekunden unterschied ist ziemlich heftig und spricht IMHO gegen NuSOAP.
Zwar hat das Ding ein riesen Vorteil, nämlich das es das WSDL selber erzeugt im gegensatz zum SoapService, aber das kann man glaube ich vernachlässigen. Denn das WSDL kann man ja entweder selber schnell stricken, oder sich vom NuSOAP generieren lassen 🙂

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

C
89 Beiträge seit 2005
vor 16 Jahren

Holla 8o ! Das ist wirklich eine ganze Menge Differenz. Danke Dir. Dann werde ich doch mal überlegen müssen, meinen Service mit den Hausmitteln von PHP5 zu schreiben. Die WSDL habe ich ja schon aus NuSOAP 🙂

Fazit: SoapService von PHP5 benutzen. WSDL via NuSOAP erstellen lassen...