Firewall Portproblem bei Applet! Alternative?

Hallo zusammen,

ich habe ein relativ umfangreiches Applet mit einigen Funktionen geschrieben. Es ist ne studentische Projektarbeit in einer Firma, die jetzt schon deutlich den Zeitrahmen gesprengt hat.
Hauptaufgabe ist aber die Kommunikation mit einer SQL-Datenbank. Nach Signierung und einiger Problembeseitigung (danke Java Update 25 :grr: ) läuft jetzt soweit alles. Auch in Verbindung mit der online zugänglich gemachten SQL-Datenbank klappt es problemlos.
Aaaaaber, leider nur von einem normalen privaten Rechner. Wenn ich das ganze in der Firma mit dem online gestellten Applet testen will klappt es nicht, weil die Firewall den Port blockiert. Wenn es von der Firma nicht aufgerufen werden kann, wäre das nicht tragisch. Allerdings sollen sich dort andere Firmen eintragen. Und ich gehe mal davon aus, dass nicht nur in dieser Firma eine solche Firewall-/Portproblematik herscht.

Jetzt versuche ich eine Alternative zu finden. Ich habe überlegt das ganze mit einer Applet<---->Servlet Kommunikation zu machen. Allerdings würde ja das Applet dann auch wieder das Servlet auf Port 8080 aufrufen. Würde es dann da zu ähnlichen Problemen kommen? Testen konnte ich das bisher nicht. Bin morgen erst wieder in der Firma.
Ich bin bei Servlets auch noch absolut unerfahren und habe es gerade mal so hinbekommen überhaupt ein Servlet lokal und auf dem Firmenserver zum laufen zu bekommen. Aber ich bekomme es noch nicht hin bzw. weiß auch nicht wie ich das anstellen soll, eine Applet/Servlet Kombi auf den Server zu bekommen. Hat da vielleicht einer ne gute Anleitung parat. Bin da ein absoluter Noob und auch in der Firma gibt es keinen der mir da wirklich helfen kann.

Meine Hauptfrage ist also:
Wird die Firewall/Portproblematik auch bestehen, wenn ich auf die Applet/Servlet Kombi umsteige?
Und wenn ja, was wären die alternativen?

Ich hoffe ihr könnt mir helfen. Mir läuft langsam die Zeit davon. Präsentation ist in 2 Wochen. Hatte mit so einer Problematik nicht mehr gerechnet. Und ich muss das auf jeden Fall bestehen damit ich nächstes Jahr mit der Uni fertig werde. Kann mir eine Wiederholung des Projekts und somit eine Verlängerung des Studiums nicht leisten.

Viele Grüße und vielen Dank schon mal,
Timo

Es ist alleine schon fahrlässig, die SQL Verbindung aus dem Applet heraus aufzubauen. Viel Spaß wenn deine Datenbank “geknackt” wird. Du solltest einen Webservice dazwischen schalten, der diesen Part übernimmt. Macht das ganze etwas sicherer.

Aber, warum man immer noch auf Applets setzt… ^^

Das Applets nicht mehr die Beste Wahl sind weiß ich mittlerweile auch. Bringt mich aber auch nicht weiter.
Es geht hier auch nicht um die Sicherheit. Das ist mir ehrlich gesagt relativ Jacke. Auch so sind die Daten in keinster Weise sensibel und werden später mit einer lokalen Anwendung eh noch mal auf eine interne DB gespiegelt.

Könnte ich denn diese Portprobleme auch bei diesem Webservice haben? Ich bin auf dem ganzen Gebiet Webprogrammierung ein absoluter Anfänger. Daher stelle ich hier jetzt auch meine Fragen. Hab zu Beginn einfach nicht mit solchen Problemen gerechnet. Das nächste mal werde ich mich vorher genauer Informieren. Für die Firma war Java ne einfache Möglichkeit um Geld zu sparen was Lizenzen angeht und für mich die einzige Programmiersprache in der ich Unibedingt schon einigermaßen nennenswerte Vorkenntnisse hatte.

Gruß, Timo

wenn zugriff auf eine externe resource benötigt wird ist es aufgabe der IT diese in absprache mit den zuständigen der “chef-etage” freizugeben

erhält die IT also keine freigabe “von oben” oder ist unfähig (sei es menschliches oder technisches versagen) die benötigte resource zugänglich zu machen ist es ganz sicher nicht deine aufgabe dieses problem zu umgehen

klar : man könnte einen webservice bauen der erstmal die DB absichert (seriously : db für zugriffe freigeben aber vom ziel-system nicht rauskommen ? schwachsinn !) und eine reguläre HTTP-kommunikation zulässt (8080 ist standard für java-server , aber nicht zwingend , man kann den app-server auch auf 80 laufen lassen oder mit ner bridge in einen laufen (z.b.) apache einbinden)

problem bleibt gleich : die IT muss den zugriff freigeben
und ob dies für eine HTTP-verbindung oder gleich direkt für ne SQL-connection gemacht wird ist am ende nur eine frage der genutzten software die den zugriff regelt

um es einfach auszudrücken : nur weil du in diesem speziellen umfeld deine arbeit nicht korrekt vorstellen kannst weil dir das netzwerk dazu einfach keine möglichkeit gibt muss dies nicht auch für andere netze zutreffen oder ein bewertungskreterium für deine software sein

Du kannst die gesamte Problematik umgehen, wenn du dir einfach einen Server holst, der sowohl SQL als auch PHP fähig ist. Am einfachsten kannst du dann ein php-script schreiben, dass einfach ankommende Befehle weiterleitet und das Ergebnis ausgibt. Du kannst die Befehle entweder über GET oder POST an php senden, für POST kann ich wenn nötig einen kleinen Ausschnitt hier posten. Das läuft alles über den Post 80, der IMMER frei ist, egal wo du bist :slight_smile:

Ich mache es so ähnlich, allerdings wenn du noch nicht viel Erfahrung im Bereich Web hast (ich auch nicht richtig) und die Sicherheit erstmal zweitrangig ist, geht das so. Ansonsten, wenn es sicherer sein soll einen gesamten php-Webservice vor SQL setzen und dann halt vom Applewt aus zugreifen.

Du musst nur sicher stellen, dass dein Applet und das PHP-Script auf dem selben Server sitzen müssen, und dort auch die DB sitzen muss, um halt von PHP drauf zugreifen zu können. Dann musst du dein Applet auch nciht mehr signieren.

ALSO: Ich persönlich nutze bplaced (kostenlos: FTP, MySQL, PgSQL, unterstützt PHP), habe dort eine SQL-DB und greife mit Java-Applet (liegt auch auf dem Server) über PHP drauf zu. Läuft super: keine Siginierung, wenig Aufwand.
Du musst aber das Applet schon immer auf dem Server haben, wenn du testen willst (bei eclipse geht es auch so, da werden Applets mit vollen Rechten gestartet, weiß nicht wies mit anderen IDEs aussieht).

mfg
BH16

PS: Du kannst recht leicht mit Google und ein wenig Wissen so ein PHP-Script aufsetzen und auch finden, wie man mit Java über POST schickt.

Moin,

erst mal Danke für eure Antworten. Bin heute wieder in der Firma und wie erwartet ist der Port 8080 ebenfalls durch die Firewall beschränkt. Also fällt die Lösung über ein Servlet somit weg.

Wie gesagt es geht Hauptsächlich um die anderen Firmen die dieses Applet ja nutzen sollen. Ich habe einfach sorge, dass dann gleich die Motivation fehlt sich überhaupt dort einzutragen. Mittlerweile ärger ich mich, dieses Problem überhaupt angesprochen zu haben. Hätte ich einfach präsentiert ohne was zu der Problematik zu sagen, wäre es vermutlich erst nach ein paar Wochen wirklich aufgefallen. Dann hätte ich meine Note auch schon gehabt.

[QUOTE=Blackhole16;26170]Du kannst die gesamte Problematik umgehen, wenn du dir einfach einen Server holst, der sowohl SQL als auch PHP fähig ist. Am einfachsten kannst du dann ein php-script schreiben, dass einfach ankommende Befehle weiterleitet und das Ergebnis ausgibt. Du kannst die Befehle entweder über GET oder POST an php senden, für POST kann ich wenn nötig einen kleinen Ausschnitt hier posten. Das läuft alles über den Post 80, der IMMER frei ist, egal wo du bist

Ich mache es so ähnlich, allerdings wenn du noch nicht viel Erfahrung im Bereich Web hast (ich auch nicht richtig) und die Sicherheit erstmal zweitrangig ist, geht das so. Ansonsten, wenn es sicherer sein soll einen gesamten php-Webservice vor SQL setzen und dann halt vom Applewt aus zugreifen.

Du musst nur sicher stellen, dass dein Applet und das PHP-Script auf dem selben Server sitzen müssen, und dort auch die DB sitzen muss, um halt von PHP drauf zugreifen zu können. Dann musst du dein Applet auch nciht mehr signieren.

ALSO: Ich persönlich nutze bplaced (kostenlos: FTP, MySQL, PgSQL, unterstützt PHP), habe dort eine SQL-DB und greife mit Java-Applet (liegt auch auf dem Server) über PHP drauf zu. Läuft super: keine Siginierung, wenig Aufwand.

Du musst aber das Applet schon immer auf dem Server haben, wenn du testen willst (bei eclipse geht es auch so, da werden Applets mit vollen Rechten gestartet, weiß nicht wies mit anderen IDEs aussieht).

mfg

BH16

PS: Du kannst recht leicht mit Google und ein wenig Wissen so ein PHP-Script aufsetzen und auch finden, wie man mit Java über POST schickt.[/QUOTE]

Das klingt auf jeden Fall schon mal ganz interessant. Wäre super wenn du dazu mal den Code posten könntest. Hier in der Firma gibt es natürlich keinen der PHP kann. Wäre ja zu schön gewesen.
Allerdings arbeitet hier jemand mit ColdFusion. Ist das damit genau so möglich?

Gruß, Timo

Die Lösung von Blackhole16 ist im Prinzip der richtige Ansatz, wenn auch mit etwas unkonventionellen Mitteln.

Du hast eine Kommunikation auf Port 8080 zu einem Server im Internet. Ist das HTTP?
Vermtulich, denn du sagst ja auch, dass die Applet-Servlet Lösung auf Port 8080 laufen würde.

Im Falle von HTTP empfehle ich dir auf Port 80 auszuweichen, der ist in der Regel immer offen bzw. hier lassen sich Beschränkungen leichter aufweichen.

Wenn du den Webservice dort nicht auf Port 80 laufen lassen kannst, dann empfehle ich dir einen anderen Webservice im Internet zu installieren (Apache) und bei diesem einfach einen Redirect einzurichten. Der Apache läuft auf Port 80 und leitet die Anfragen an den anderen Server weiter, auf Port 8080.

Tipp: für ein Spielprojekt kann man die Securitybedenken evtl. ignorieren. Für etwas produktives… auf keinen Fall.

Ich muss jetzt zur Schule, den Code poste ich heute Nachmittag, wenn ich wieder zu Hause bin.

mfg
BH16

@BH16
ohne direkt werden zu wollen, aber man merkt das du noch nie in einem “normalen” firmen-netz warst
wie ich bereits sagte : wenn zugriff auf eine resource besteht muss diese freigegeben werden
und dabei ist es völlig egal ob es HTTP (TCP/80) ist oder sonst was

nur weil es vielleicht in eurem schulnetz so ist das eure admins es nicht auf die reihe bekommen euch alles wegzublocken (was in einer schule vielleicht auch heutzutage nicht mehr sinn eines filters ist) kannst du dieses möchtegern-netz nicht auf andere dinge übertragen

in sehr vielen firmen ist es nämlich genau so das es keinen block-filter gibt der mal die eine oder andere pornoseite blockt , sondern nur einen freigabe-filter der halt nur zugriff auf bestimmte resourcen erlaubt und ansonsten alles blockiert

das ist bei mir so, das wird bei TO so sein und findet man eigentlich auch überall wo das firmennetz ans internet angeschlossen ist

darum ist deine idee von wegen mal eben schnell n PHP-script basteln und das ganze auf nem freehoster packen eine so dermaßen was von bescheuerte idee , sorry , aber anders kann mans nich mehr sagen

das soll ne software für große geschäftskunden werden die remote auf externe datenbanken zugreifen wollen, da zählt performance und sicherheit, und das kann so ein kleiner free-anbieter nun bei weitem nicht bieten (wenn ich mal so gucke was bei mir auf arbeit täglich abgeht, und das mal mit jedem access meines auftraggebers hochrechne haben wir alleine was die rechner und bandbreite angeht mehr power als bplaced kapazitäten, zu schweigen von unseren rechenzentren, da würden wir mit sicherheit in den hauptzeiten das system lahmlegen)

irgendwie fehlt dir echt sehr stark das wissen und scheinbar die vorstellungskraft wie “groß” sowas werden kann
das ist kein ein-mann-projekt, sondern schon mal für n paar hundert leute gleichzeitig gedacht, da kannste deinen webservice in die tonne werfen

@FArt
ja klar, wie ich schon sagte : natürlich kann man sowas mit nem webservice “umgehen”, aber warum sollte man sich damit zusätzlich aufwand machen ?

ich wiederhole mich gerne noch mal : wenn zugriff benötigt wird muss die IT diesen freigeben
es ist NICHT aufgabe des entwicklers seine software an das vorhandene netz anzupassen (außer vllt der aufpreis dafür stimmt)

@TO
es gibt hier zwar so einige antworten, aber das sind dann eher hobby-lösung für ein-mann-projekte die für n kleinen nutzer-kreis gedacht sind

worum es geht kenne ich aus dem täglichen arbeitsleben : eine verteilte software die von mehreren genutzt wird zu zugriff auf eine gemeinsame (meist externe) resource hat
mit sowas arbeite ich täglich, und auch unser system ist in java geschrieben (wobei, wenn ich mir so die fehlermeldungen angucken : überall nullpointer und überläufe, also wer das geschrieben hat mag das ganze zwar wohl irgendwie zusammen bekommen haben, aber von sauberem clean-code hat er ganz sicher keine ahnung (z.b. lieber “if(object==null)” anstatt “catch(NPE)”)
aber unser system ist halt eine WebStart-App und kein applet, und natürlich sind bei uns die nötigen zugänge in unserem firmen-proxy frei und dieser kann auch mit den verbindungen umgehen

sowas kann man eigentlich in jeder sprache umsetzen, aber die vorraussetzung das es am ende auch richtig läuft muss dann nun mal der schaffen dem das netz gehört

auf was anderes würde ich mich in der situation gar nicht einlassen

Weil es die Infrastruktur bedingt und z.B. der Port 80 und das Protokoll HTTP oft sowieso schon frei ist oder mit weniger Bedenken (fälschlicherweise, aber egal) freigegeben wird.

Da wir hier die genauen Vorgaben und Umstände nur unzureichend kennen, ist es schwer den einen richigen Tipp zu geben. Ich habe eine Möglichkeit beschrieben, die gerne und oft genommen wird und hier auch zielführend sein könnte.

Es ist Aufgabe eines Architekten (oder Entwicklers) vor der Implementierung die Anforderungen zu kennen und sein Design und die Implementierung darauf anzupassen. Somit wäre vorher vermutlich die Realisierung über ein Applet schon fraglich gewesen, anscheinend aber auf jeden Fall die Anbindung zum Server.
Jetzt ist es aber wie es ist, jetzt muss eine Lösung her. Für den zahlenden Kunden. Abzuwägen, welches das kleinere Übel ist, überbleibt dabei anderen.

@ Unregistriert:
Ich weiß, dass ich von Java und Netzwerken noch nciht viel Erfahrung habe, allerdings war bplaced nur als Beispiel angeführt, welches genau den Zweck erfüllt (im kleinen), den er will. Wenn er nun einen besseren Server braucht für sein Projekt, wird er diesen schon gestellt bekommen, allerdings bräuchte er für meinen Vorschlag die o.g. Tools/Interpreter.

Ich war wirklich noch nicht viel in Firmennetzwerken unterwegs, allerdings habe ich noch nicht bemerkt, dass nur wenige Seiten freigegeben sind. Und selbst wenn ist es denke ich für IT der Firmen einfacher eine URL in die Whitelist einzutragen als eine Sicherheitslücke, also einen Port zu öffnen.

Was die Sicherheit von PHP betrifft gibt es genug Funktionen von PHP aus, die z.B. SQL-Injection finden und unterbinden können, damit habe ich mich aber auch noch nicht beschäftigt, hatte noch keine so großen Projekte dass ich bisher nur auf bestimmte Zeichen überprüfe. Was PHP-Injection über POST angeht habe ich noch keine Erfahrungen. Allerdings ist es auf jeden Fall sicherer als mit JAVA selber eine SQL-Verbindung aufzubauen. Immerhin kann man dabei User und Pwd einfach mit einem Editor aus den class-Files auslesen, wenn ich mich richtig erinnere (Strings).

Ein eigener Webservice wäre natürlich eine Alternative, wo ich allerdings nicht mitsprechen kann. Ich weiß aber nicht, ob das einfacher und sicherer ist, besonders lustig wird es besonders, wenn nicht alle Exceptions gecatcht werden. Ich habe gerade letztens eine schöne Seite gefunden, wo Jetty (wenn mich nciht alles täuscht ein Java-Webservice) mit allen Vulnerabilities (viele mit NPEs) gelistet war.

Soll ich den Code den ich immer nutze hier posten oder möchte lieber jemand anderes einen ganz anderen Vorschlag vorstellen?

mfg
BH16

@turbo beschreibe doch mal einfach die typischen Use-Cases.

Wo ist das Applet,
wie gelangt es zum Kunden,
welche Daten fließen von wo
nach wo.

Wenn das Applet nur eine Eingabemaske sein sollte, dann kann man auch per smtp arbeiten.

Mit pgp verschlüsseln und E-Mails empfangen.
Auf Firmenseite, dann dieses Postfach abrufen und die Mails analysieren.

Ansonsten kannst du ja mal @tuxedo anschreiben, der hat da mit SIMON was recht schönes gebaut. Damit könntest du auch RMI einsetzen. Ich erinnere mich da an jemanden der damit einiges gemacht hat. Per Hole Punching kann da so manch ein Port umgangen werden.

SIMON wird nicht nur von „jemanden“ benutzt. Es gibt so einige die SIMON produktiv einsetzen. Darunter auch Firmen die für andere namhafte Firmen arbeiten. Guckst du hier: http://dev.root1.de/projects/simon/wiki#Who-uses-SIMON

Jüngster Verwender ist die Landesbank Baden-Württemberg.

Allerdings verwendet SIMON TCP-Ports. Da bräuchtest du schon TCP-Hole-Punching, was mit Java nicht ganz so einfach ist wie UDP-Hole-Punching.

Wenn der Router UPnP unterstützt (ist meist per default deaktiviert und gibt’s ingesamt bei immer weniger Routern), dann gibt’s im Netz schicke Tools mit denen du den Port per UPnP freischalten kannst.

Ansonsten: Wer einen Server hinter einem Router hosten will, der sollte auch ein Portforwarding einrichten können. Für gewöhnlich ist das in 1-2 Minuten erledigt. → Meine Meinung.

Aber vielleicht bau ich irgendwann noch einen Vermittlungsserver den ich dann bei mir hoste und biete damit einen Vermittlungsservice gegen ein entsprechendes Entgelt an… Für alle die mit Portforwarding nicht klar kommen :wink:

[QUOTE=FArt]
Es ist Aufgabe eines Architekten (oder Entwicklers) vor der Implementierung die Anforderungen zu kennen und sein Design und die Implementierung darauf anzupassen. Somit wäre vorher vermutlich die Realisierung über ein Applet schon fraglich gewesen, anscheinend aber auf jeden Fall die Anbindung zum Server.
Jetzt ist es aber wie es ist, jetzt muss eine Lösung her. Für den zahlenden Kunden. Abzuwägen, welches das kleinere Übel ist, überbleibt dabei anderen.[/QUOTE]

Da hast du allerdings recht. Wenn ich mir überlege wie viel Zeit ich mittlerweile in ein eigentlich mit 240 Stunden angesetztes Projekt gesteckt habe, hätte ich direkt auf was anderes umsteigen sollen und es in einer anderen Sprache schreiben müssen. Hätte mich da eindeutig vorher genauer mit der Problematik von Applets beschäftigen sollen. Nachher ist man leider immer schlauer. Allerdings muss ich bei dem Projekt ne einigermaßen gute Note bekommen. Geld ist mir dabei reichlich egal.

Allerdings haben wir uns jetzt geeinigt. Die Mitarbeiter waren der Meinung, das die Firmen, die diese Problematik haben, dann einfach Pech haben. Mein Glück. Und wenn langfristig zu häufig das Problem auftritt muss sich halt ne Lösung überlegt werden. Aber bis dahin hab ich zumindest schon mal meine Note. Rest ist mir egal. Also sind wir jetzt auf dem gleichen Stand, als hätte ich das Problem gar nicht erst angesprochen.

Die Anwendung dient dazu, dass sich Nutzer registrieren und dann eine Art Fragebogen allerdings in Baumstruktur ankreuzen. Dieser Fragebogen wird mit einer lokalen Anwendung verwaltet. Ausgelesen wird der Fragebogen bei Appletstart aus einem xml. Zu jeder Userid wird dann das angekreuzte am Ende in der SQL-DB abgespeichert. Außerdem kann der User sich noch ein PDF mit seinen Angaben speichern.
Also wie ihr seht in der Theorie ne schöne Sache. Mit der Umsetzung als Applet nicht so ganz ideal.

Die andere lokale Anwendung dient dann auch noch dazu die Daten aus der MySQL-DB anzuzeigen aber auch dazu sie in eine interne MSSQL 2000 DB rüberzuspielen, damit eine weitere Anwendung darauf zugreifen kann (die ich aber zum Glück nicht mehr schreiben muss :smiley: )

Ich danke euch allen auf jeden Fall schon mal für eure Hilfe!!!