absicherung des Sockets? muss das sein?
-
Wenn man einen Socket hat wie schaft man es das kein andere seine IP benutzt und über das Port sinnlosse Informationen schickt und damit den Server in die Knie???
Hat sich da schon mal jemand gedanken drüber gemacht? Ich meine das ist die einfachste art das ding zu zerstören. Wie macht Ihr das?
-
Nochmal auf Deutsch, bitte. Ich versteh' irgendwie kein Wort...
-
hehe lol
ich hab ein Socket der sich über IP und Port zum Server verbindet und dort Informationen austauscht. Dazu hab ich ein Java Programm auf den Rechner und ein Script läuft beim Server im Hintergrund.
Aber wenn mich jetzt jemand ärgern will schreibt er auch ein Programm was sich zu meinen Server verbindet, weil er brauch ja nur IP und Port und spammt ihn mit Informationen zu.
Und mein toller Server ist dahin.
-
blue_devil86 schrieb:
hehe lol
ich hab ein Socket der sich über IP und Port zum Server verbindet und dort Informationen austauscht. Dazu hab ich ein Java Programm auf den Rechner und ein Script läuft beim Server im Hintergrund.
Aber wenn mich jetzt jemand ärgern will schreibt er auch ein Programm was sich zu meinen Server verbindet, weil er brauch ja nur IP und Port und spammt ihn mit Informationen zu.
Und mein toller Server ist dahin.
Normalerweise hast doch ein Protokoll definiert für den Port?
Das heißt der Spammer müsste dein Protokoll kennen.
Ausserdem kannst du ja angeben, das nur bestimmte IPs sich verbinden können, ausserdem kannst du ein Benutzername/Password eintragen. Zusätzlich kannst du ein Timeout pro Verbindungsversuch definieren, z.B. 10sec dann ist nichts mehr mit Spammen. Oder man sperrt die IP für 24 Stunden wenn man sich 3 mal falsch identifiziert hat.
Gibt also genügend Möglichkeiten.
-
Protokoll meinst du TCPIP/UDP???
Wenn ja wäre es ja ne 50 zu 50 Chance.Das mit den Benutzername und Passwort wird auch abgefangen das man in "mein" Programm reinkommt.
Ah ich glaub mir ist es gerade eingefallen in den moment wo man die Verbindung aufbaut müste man es übermitteln nur dumm da muss man dann ne Datenbankverbindung aufbauen auf den Hintergrund Script die Resourcen nja anderes wird es wohl nicht gehen danke dir.Client: getOutputStream("übergabeParameter")--> geht das zum Server???
-
blue_devil86 schrieb:
Protokoll meinst du TCPIP/UDP???
Wenn ja wäre es ja ne 50 zu 50 Chance.Das mit den Benutzername und Passwort wird auch abgefangen das man in "mein" Programm reinkommt.
Ah ich glaub mir ist es gerade eingefallen in den moment wo man die Verbindung aufbaut müste man es übermitteln nur dumm da muss man dann ne Datenbankverbindung aufbauen auf den Hintergrund Script die Resourcen nja anderes wird es wohl nicht gehen danke dir.Client: getOutputStream("übergabeParameter")--> geht das zum Server???
Passwörter werden normalerweise verschlüßelt übermittelt. Z.B. mit MD5. Dann vergleicht man ob das empfangene MD5 mit dem MD5 in der Datenbank übereinstimmt. Natürlich müsste man einmal das md5(Password) irgendwie in die Datenbank eintragen, aber ab dann ist es sicher.
Bei Protokoll kann man doch sicher sich ein eigenes Übermitteln. Einfach per TCPIP/UDP als Datenpacket ein eigenes Protokoll.
-
MD5 ist nur eine Hash-Funktion, da wird nix verschlüsselt. Sonst könnte man es ja wieder entschlüsseln, aber vom Hashwert zurück auf den String ist ziehlich unmöglich
-
Okay dann werd ich das mal so versuchen hab zwar noch gar kein plan wie ich das machen soll in Java das er nur einmal Benutzer/Passwort überprüft wird aber scho irgendwie gehen
ich danke euch
-
hier ein tip von jemand der sich damit schon rumgeschlagen hat:
leg dir für jeden teil deines programm klassen an:
für den Server
MainClass
ClientHandler (implements Thread)
ProtocolClass (statisch)für den Client
MainClass
SocketClassin der MainClass hast du deinen ServerSocket, der wird in einer endlosschleife abgefragt, und steht auf accept (achtung hier muss unbedingt eine abbruchbedingung rein und eine möglichkeit den socket hinnund wieder aus dem accept zu werfen).
Ein client verbindet, accept reagiert, erzegt eine instanz von ClientHandler, dieser bekommt den socket der von accept übergeben wurde und verarbeitet in einem eigenen task von jetzt an die verbindung des client, der server geht wieder in den accept zstand.
der clienthandler holt sich die streams vom socket (getinputstream / outputstream) der clienthandler wartet jetzt darauf das in dem stream ein integer wert geschrieben wirdInputStream Input = Socket.getInputStream();
int protokollnummer = Input.readInt();dann gehst du in die ProtocolClass rufst die methode die zu der nummer gehört auf, übergibst dieser den InputStream und die methode liefert dir die daten aus dem restlichen datenstrom, sofern das protokoll beim senden richtig umgesetzt wurde.
beim client geschiet das nciht sehr viel anderswenn du möchtest kram ich heut abend mein chat-programm nochmal raus und stell es auszugsweise hier rein ^^