# Internet Verbindung verschlüsseln



## fleckdalm (9. Apr 2011)

Ich habe (siehe signatur) ein Quiz gemacht mit dem man auch Fragen online speichern kann! (Es würde mich übrigens sehr freuen wenn ihr es euch mal anschaut sobald der Fehler hier behoben ist!!)

Jetzt habe ich folgendes problem: Mit der zusatzklasse org.apache.....ftp lade ich die fragen hoch und wieder runter, nur gebe ich dafür die zugangsdaten zu meinem online account an damit das programm über ftp darauf zugreifen kann. Diese können jedoch (auf was ich von einem forenmitglied hingewiesen wurde) ganz leicht mit programmen wie wireshark ausgelesen werden! Das will ich aber auf keinen Fall!! Deshalb meine Frage kann man die Verbindung irgendwie verchlüsseln? Und wieso ist diese zusatzklasse überhaupt so unsicher? Wenn das nicht geht wie könnte ich mein problem sonst(außer mit php da ich keine neue programmiersprache lernen will) möglichst einfach lösen?
Bitte antwortet mir schnell, da mein Quiz eben bis dahin nicht benutzbar ist!
Schonmal DANKE, mfg Fleckdalm


----------



## XHelp (9. Apr 2011)

Kannst du mal das Problem näher beschreiben, so dass man sich die Software nicht ziehen muss und sich die restlichen Informationen dazu denken muss?
Ist diese FTP-Lade-Funktion im Client drin, so dass jeder quasi die Zugangsdaten bekommt? Oder ist das Extramodul des Projektes, welches nur du hast?


----------



## Gast2 (9. Apr 2011)

Es hilft dir nichts die Verbindung zu verschlüsseln wenn die Zugangsdaten in deinem Quellcode stehen 

Der sicherste Weg (wie auch schon im anderen Thread geschildert) ist es wenn du nen Skript (z.b. PHP) dazwischen schaltest. Da können dann die Zugangsdaten zu deiner DB oder was auch immer drin stehen, dann kommt da auch niemand so einfach ran.


----------



## fleckdalm (9. Apr 2011)

Ach schade ich hatte gehofft das irgendwie vermeiden zu können...
Aber wie kann ich nun mit php textdateien beschreiben bzw. Auslesen? Wie rufe ich sie dann mit java auf? Und wie füge ich beim beschreiben zeilenumbrüche ein?
Danke, mfg Fleckdalm


----------



## Gast2 (9. Apr 2011)

> Aber wie kann ich nun mit php textdateien beschreiben bzw. Auslesen? Wie rufe ich sie dann mit java auf? Und wie füge ich beim beschreiben zeilenumbrüche ein?


Schau dir doch dazu bitte vorher nen paar Tutorials an. Es bringt dir ja nicht wenn dir hier jemand nen PHP skript hinknallt und du verstehst die hälfte nicht..

Aufrufen kannst du das wie ne ganz normale Internetseite, also z.b. per URLConnection oder mit dem HTTPClient aus den apache commons.


----------



## Ark (9. Apr 2011)

Mal ein paar grundsätzliche Dinge, damit du überhaupt eine Vorstellung davon bekommst, worum es in Bezug auf Netzwerksicherheit und dein Quiz geht:

Wann immer du eine Architektur schaffst, an der potentiell zwei Rechner beteiligt sind, brauchst du dafür auch mindestens zwei laufende Programme: eines auf dem einen Rechner und ein weiteres auf dem anderen.

Wenn du dein Quiz testen möchtest, sind nach den aktuellen Umständen zwei Rechner beteiligt: [c]localhost[/c] (das ist der generische Name für den eigenen Rechner aus Sicht dieses Rechners, aus deiner Perspektive also dein Rechner) und [c]www.javaquiz.de.to[/c]. Auf beiden Rechnern muss jeweils mindestens ein Programm laufen, damit dein Quiz funktionieren kann.

Nun ist es so, dass offensichtlich die beiden Programme unterschiedliche Dinge leisten müssen: Das eine Programm läuft auf [c]www.javaquiz.de.to[/c], es hält die Fragen für die Clients bereit, die am Quiz teilnehmen möchten. Es bietet also einen Dienst an (nämlich einen Quizfragen-Verwaltungsdienst) und wird deswegen _Server_ genannt. Auf dem anderen Rechner, [c]localhost[/c], läuft das Programm, das u.a. die Fragen von eben beschriebenem Server abholt, um sie dem Anwender zu präsentieren. Dieses Programm nimmt den vom Server angebotenen Dienst in Anspruch und wird deshalb _Client_ genannt.

Eine Architektur, die auf die beschriebene Art und Weise zwei unterschiedliche Programme (Server und Client) verknüpft, heißt Server-Client-Architektur. (Diese ist abzugrenzen von z.B. Peer-to-Peer-Netzen, wo jeder Teilnehmer gleichzeitig Server und Client ist. Aber das nur am Rande.)

Im Gegensatz zu den Clients muss der Server rund um die Uhr laufen, wenn eben rund um die Uhr Teinehmern der entsprechende Dienst (in unserem Fall ja der Quizfragen-Verwaltungsdienst) angeboten werden soll. Dieser Umstand ist unabhängig davon, um welchen konkreten Dienst es sich handelt, da er nur von der Zeit abhängt. Da du wahrscheinlich nicht jeden Tag zu [c]www.javaquiz.de.to[/c] läufst, um ihn hochzufahren, ist davon auszugehen, dass auch der Quizfragen-Verwaltungsdienst rund um die Uhr laufen wird.

In deiner bisherigen Umsetzung verwendest du ebenfalls eine Server-Client-Architektur. Allerdings benutzt du als Server kein speziell für dein Problem abgestimmtes Programm, sondern einen FTP-Server. Dieser Server läuft auch rund um die Uhr, du kannst dich selbst davon überzeugen, indem du in deinem Browser [c]ftp:www.javaquiz.de.to[/c] aufrufst. In diesem Fall fungiert dein Browser (z.B. Firefox) als Client, genauer gesagt als FTP-Client.

Nun wieder etwas allgemeiner: Server und Client tauschen Nachrichten aus, um miteinander zu kommunizieren. Wie diese Nachrichten aussehen müssen, also welche Bytefolgen was zu bedeuten haben, regelt eine Vereinbarung zwischen beiden Teilnehmern, das so genannte _Protokoll_. Davon kennst du auch sicherlich einige, zumindest vom Namen her, z.B. Hypertext Transfer Protocol (HTTP) und File Transfer Protocol (FTP). (Auf anderer Ebene gibt es bspw. noch das Transmission Control Protocol (TCP) und das Internet Protocol (IP). Aber auch das sei wieder nur am Rande erwähnt.)

Wie lässt sich nun dein Problem mit der bisherigen Architektur einordnen? Du hast bisher FTP benutzt. FTP ist zum Hoch- und Runterladen von Dateien gedacht. (Hochladen heißt, das Ziel der Datenübertragung ist der Server. Beim Herunterladen ist das Ziel der Client.) Dein FTP-Server verlangt die Eingabe eines Nutzernamens und eines Passworts. Nutzername und Passwort werden aber, wie im Protokoll spezifiziert ist (also vollkommen regelkonform!) unverschlüsselt(!) übertragen.

Das heißt ganz konkret, dass jedes Gerät zwischen deinem Client auf [c]localhost[/c] und dem Server auf [c]www.javaquiz.de.to[/c] die Login-Daten mitlesen kann. Befindest du dich z.B. in einem W-LAN, können alle, die dieses W-LAN nutzen, deine Login-Daten abfangen! Jeder, der sich mit diesen Nutzerdaten einloggt, könnte dann Unsinn anstellen (z.B. [c]www.javaquiz.de.to[/c] zum Verbreiten von Dateien fragwürdigen Inhalts oder Herkunft nutzen).

Was also kannst du machen, um diese eklatante Sicherheitslücke zu schließen?

Eine Möglichkeit wäre, den FTP-Server ohne Login nutzbar zu machen. Das würde zwar das Übertragen von Login-Daten verhindern, löst aber das gerade geschilderte Problem nicht.

Wesentlich besser wäre die Möglichkeit, anstatt beliebiger Dateien beliebigen Inhalts nur noch Quizfragen und ihre Antworten zu akzeptieren. Dann kannst du aber so FTP nicht mehr verwenden, sondern musst (zusätzlich) ein eigenes Protokoll entwerfen.

Ein Ansatz dazu wurde schon genannt: Du kannst z.B. einen PHP-Server verwenden. PHP ist eine Skriptsprache, und die in dieser Sprache geschriebenen "Programme" (Skripte) werden auf dem Server ausgeführt. Die Übertragung der Daten geschieht dann für gewöhnlich über einen HTTP-Server (z.B. Apache). Das ist auch hier bei diesem Forum der Fall.

Was musst du nun programmieren, wenn du z.B. mittels PHP (oder irgendeiner anderen Sprache) einen entsprechenden Quizfragen-Verwaltungsdienst zur Verfügung stellen möchtest?

Nun, du müsstest z.B. dafür sorgen, dass richtige Fragen von Unsinn (z.B. zufälligen Bytefolgen) unterschieden werden. Hast du dir überlegt, wie du das anstellen möchtest? Diese Frage steht übrigens unabhängig davon, ob du PHP oder Java verwendest, und ist zentral für die richtige Implementierung deines Quizdaten-Übertragungsprotokolls (das du dazu natürlich schon vorher entworfen haben musst). Hierbei geht es nämlich weniger darum, dass die Clients vernünftige Fragen präsentiert bekommmen, sondern vielmehr darum, dass dein Quizfragen-Server (<-- stell dir hier z.B. deine PHP-Skripte vor) nicht kompromittiert und letztendlich zweckentfremdet wird (denk an das Fragwürdige-Dateien-Problem von oben!). Potentiellen Angriffen ist der Server immerhin rund um die Uhr ausgesetzt.

Wie du nun hoffentlich siehst, kann man nicht "mal eben" im Internet einen Dienst anbieten. Bis dahin gibt es nämlich viele Fragen zu klären und viele Dinge zu beachten. Gerade in der Serverprogrammierung kann jeder noch so kleine Fehler verheerende Folgen haben, und solche Stolperfallen gibt es viele, sehr viele.

Ark


----------



## fleckdalm (10. Apr 2011)

Danke, jetzt verstehe ich das ganz gleich viel besser!! 

Ich habe mir das mit php schon ein bisschen angeschaut, aber ich kann es nur mit dem Webbrowser aufrufen! Ich habe es mit Java wie folgt versucht: 
	
	
	
	





```
try {
            URL u = new URL("http://www.quizdaten.lima-city.de/test.php?frage=HIER IST DIE FRAGE");
            URLConnection uc;
            try {
                uc = u.openConnection();
                   uc.connect();
  
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }

            
            // TODO code application logic here
        } catch (MalformedURLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
```
es passiert aber einfach gar nichts!!
wieso?
und wie kann ich dann wenn es funktioniert in meinen txt dateien nach jeder Frage zeilenumbrüche einfügen?
Danke, mfg Fleckdalm


----------



## Ark (10. Apr 2011)

fleckdalm hat gesagt.:


> es passiert aber einfach gar nichts!!


Sicher, dass nichts passiert? Woran machst du das fest? Was hätte denn deiner Meinung nach passieren sollen?

Ein Rechner denkt sich nichts aus. Wenn du ihm nicht sagst, was er machen soll, dann macht er auch nichts!

Es gibt/gab genügend Nutzer hier im Forum, die kaum Kenntnisse hatten, aber unbedingt einen 3D-Egoshooter basteln wollten. Warum dachten sie, Programmieren wäre ja so einfach? Weil der Rechner so viel kann? Der Witz ist, dass sie tatsächlich ihr eigenes Vorhaben ad absurdum führten: Der Ansatz beim Programmieren eines Ego-Shooters ist doch, dass es der Rechner ja noch nicht (so) kann, denn sonst bräuchte man ihn ja nicht zu programmieren!

Und genauso kannst du auch nicht voraussetzen, dass ein paar Zeilen Java-Code schon einen Browser wie Firefox machen würden.

Nochmals also die Frage von oben: Was hätte denn deiner Meinung nach passieren sollen?

Ark


----------



## Haave (10. Apr 2011)

Es wäre anderen Benutzern gegenüber nett, wenn du deine Fragen nicht mehrfach in verschiedenen Threads stellst: http://www.java-forum.org/java-basi...27-string-filtern-systeminfos.html#post748961
Das wahrt nicht gerade die Übersicht und kann zudem den Eindruck erwecken, dass du nur generisch Beiträge erstellst und dich gar nicht so richtig interessiert, was andere Leute darauf antworten.


----------



## fleckdalm (10. Apr 2011)

Ja, das hat sich irgendwie so ergeben weil es in beiden threads um etwas unterschiedliches gegangen ist, und es dann aber auf die gleiche Frage herausgelaufen ist. Entschuldigung!

könnte mir aber bitte jemand meine Fragen beantworten: Wie kann ich das php script jetzt mit java aufrufen? (so wie oben gepostet gehts nicht, und so wie im anderen thread gepostet ohne leerzeichen gehts auch nicht:-(
Und wie kann ich es machen das nach jeder frage ein Zeilenumbruch eingefügt wird?

Schonmal Danke für eure schnellen antworten, mfg Fleckdalm

Edit: stimmt habe vergessen arks frage zu beantworten. Also ich stelle es dadurch fest, dass wenn ich das script über den browser aufrufe die übergebene frage in die txt datei am server geschrieben wird und wenn ich es mit meinem programm versuche nichts in die datei geschrieben wird!
Und wegen google ich habe schon SEHR viel gegoogelt aber nichts passendes gefunden, nur sachen wie zb. Man von php auf javaanwendunen zugreift und nicht umgekehrt oder javascript, auch zum problem wie man einen zeilenumbruch einfügt finde ich nichts passendes....
Nach was hast du den gegoogelt das du so viel passendes findest?


----------



## XHelp (10. Apr 2011)

fleckdalm hat gesagt.:


> könnte mir aber bitte jemand meine Fragen beantworten:



Beantworte doch zuerst die Frage von Ark... außerdem kannst du auch ganz einfach kurz googlen, dann findest du schon 1,2,9999999 Lösungen.


----------



## Ark (10. Apr 2011)

fleckdalm hat gesagt.:


> Also ich stelle es dadurch fest, dass wenn ich das script über den browser aufrufe die übergebene frage in die txt datei am server geschrieben wird und wenn ich es mit meinem programm versuche nichts in die datei geschrieben wird!


Gut. Du schreibst ja mindestens zwei Programme, einen Server und einen Client. Schreib bitte immer dazu, welches Programm Client ist und welches Programm Server ist.

Du benutzt anscheinend einen Logger. Weißt du überhaupt, was das ist und wozu das gut ist? Wenn ja: Was fragst du überhaupt?! Wenn nein: Wie kommen bitte Dinge in deinen Quelltext, mit denen du nicht umgehen kannst?



fleckdalm hat gesagt.:


> könnte mir aber bitte jemand meine Fragen beantworten: Wie kann ich das php script jetzt mit java aufrufen?


Welcher Teil deiner Frage gehört zum Client, welcher zum Server? Falls PHP serverseitig und Java clientseitig ausgeführt wird: Dem Server eine Nachricht zukommen lassen.  So was probierst du ja schon (siehe Anfang dieses Beitrags).

Im Übrigen solltest du zum Hochladen von Fragen eher POST statt GET benutzen. (Was das ist, erkläre ich dir hier nicht!)

Ark


----------



## fleckdalm (10. Apr 2011)

Nein ich habe keine ahnung was logger ist, aber das ist ja nur im catch teil und da knan man ja im grunde reinschreiben was man will. Das hat netbeans so generiert also hab ich es gellassen, aber das hat ja keinen einfluss darauf ob das script aufgerufen wird, sondern wird nur ausgeführt wenn der aufruf des php scripts fehlschlägt. Das java programm ist übrigens der client.
kann mir nicht einfach bitte jemand sagen was ich an meinem code verändern muss, damit das php script aufgerufen wird, und wie ich ihn php zeilenumbrüche einfüge?

Danke, mfg Fleckdalm


----------



## despikyxd (12. Apr 2011)

mich interessiert mal folgende zeile

Schreibt aber bitte keine beleidigenden, diskriminierenten oder ähnliche Fragen (sonst wird euer Computer für immer gesperrt!!)

WIE willst du das machen ?


IP-Base ?

würde in nem LAN erstmal ALLE rechner blocken ... egal von welchem es kam
kann durch Proxies umgangen werden
da die meisten einen einwahl-anschluss haben *ja noobs .. auch DSL ist DAIL-UP* bekommt man nach nem reconnect ne neue ip ... was passiert aber wenn jemand zufällig eine ip bekommt die du geblockt hast ... der jenige aber noch nie was mit deinem quiz zu tun hatte


ID-Base ?

käme erstmal drauf an wie du eine ID generierst und wie / wo du sie speicherst ...
wichtig wäre noch die manipulations-sichherheit ...


User-Base ?

registrierung ? ... lässt sich durch neu-registrierung umgehen ...
check ob e-mail schon mal verwendet wurde > dienste wie Trash-Mail machens möglich auch das zu umgehen
ip-check > proxies



du siehst also ... es ist nicht einfach mal eben einen user zu sperren ...
es gibt immer wege es zu umgehen ...

ich habe selbst ein system bei dem ich auch sperrungen vornehmen kann und habe mir im vorfeld sehr viel gedanken gemacht um auch das umgehen zu verhindern ...
es hat mich viel arbeit gekostet z.b. das problem mit den ständig wechselnden IP's zu umgehen ... und auch einen wirksamen schutz gegen manipulation der ID zu entwickeln war nicht grad einfach ...
dessweiteren kann ich nicht nur anschluss- oder rechner-basierend operrieren ... ich kann sogar einzelne benutzer auf einem pc unterscheiden ... *ja .. hat verdammt viel arbeit gekostet*

und trotzdem .. ja ich gebe zu das es dennoch einfach ist auch mein system zu umgehen ... und gegen diese einfache schwachstelle kann ich mit JAVA nicht viel machen ... dazu müsste man eine system-nähere sprache verwenden ... aber das will und vorallem kann ich nicht *kann halt nur java und php*

du kannst also diesen satz mit trotz löschen da er schlicht keinen sinn ergibt da sämtliche sperren immer irgendwie umgangen werden können ... *selbst wenn man dinge wie Handy-Nummern, Kontoverbindungen oder Personalausweisenummern verwendet und diese auch richtig prüft *z.b. den nutzer zur aktivierung seines accounts zwingen in dem er bei dir anruft .. allerdings nur wenn dieser seine nummer mit-sendet ... unterdrückte nummern werden z.b. nicht akzeptiert* ... *oder z.b. die prüfung der kontoverbindungen bei der jeweiligen bank *geht nur mit zustimmung des inhabers** ... können user die dir schaden wollen das auch locker machen ... auch wenn es mit einem erheblichen aufwand verbunden ist*


----------



## XHelp (12. Apr 2011)

despikyxd hat gesagt.:


> *ja noobs .. auch DSL ist DAIL-UP*



Und was lässt dich diese unheimlich schlaue Behauptung aufstellen?


----------



## fleckdalm (12. Apr 2011)

Bis jetzt sperre ich einfach nur den Benutzernamen, was zwar nocht sonderlich effektiv ist, aber das ist jetzt auch eher in den Hintergrund gerückt. Ich benutze die sperr funktion nämlich eigentlich gar nicht bzw. Habe ich sie bis jetzt noch nicht genutzt. Mittlerweile lass ich das eher nur so als abschreckung stehen, und filtere die fragen lieber. Also jedesmal wenn blöde wörter vorkommen, werden diese gefiltert, und gegebenenfall neue zum filter hinzugefügt 
mfg Fleckdalm


----------



## despikyxd (12. Apr 2011)

XHelp hat gesagt.:


> Und was lässt dich diese unheimlich schlaue Behauptung aufstellen?



die tatsache das DSL nur eine weiterentwicklung der Dail-Up technik ist ... und damit auf dieser basiert ...
DSL ist keine NEU-entwicklung ... außerdem : WIE sollte man sonst über das TELEFON-netz gehen ohne diesem mitzuteilen WER / WAS das ziel ist ... denn das geht nur mit rufnummern ... genau wie bei dail-up ...
das diese jedoch nicht mehr dem modem mitgeteilt werden müssen sondern in diesem fest eingestellt sind verbergen diese tatsache oft ...

und jetzt komm nich mit PPPoE oder sonstwas ... denn WAS über die telefon-verbindung gesendet wird ist letztlich egal ... solange das gegenüber es versteht


----------



## XHelp (12. Apr 2011)

despikyxd hat gesagt.:


> WIE sollte man sonst über das TELEFON-netz gehen ohne diesem mitzuteilen WER / WAS das ziel ist ...



Digital Subscriber Line Access Multiplexer ? Wikipedia


----------

