# Hilfe: Web Applets (Grundsatzfrage)



## guwapo (17. Feb 2007)

moin moin!

Ja ich weiss.. immer newbig wenn einer direkt nach der Registrierung um Hilfe bittet 
Aber deswegen biete ich auch meine Hilfe an, in dem ich den Helfenden Webspace gebe (eigener Server, php/mysql, genügend space + traffic) für ca. ein Jahr (bestimmt auch länger) oder php-technisch helfe. 

Ich möchte was "einfaches" machen, aber leider schaff ich das nicht einmal

Folgende Tutorials habe ich getrennt zum Laufen gebracht (war ja nicht schwer):
http://www.roseindia.net/java/example/java/applet/Opening-new-browser-window-from-Applet.shtml
http://java.sun.com/docs/books/tutorial/networking/urls/readingURL.html

nun möchte ich das ganze kombinieren. Sprich:
- Quelltext einer Seite wird gelesen
- diesen Quelltext soll er nun als URL benutzen die er in einem neuen Browserfenster öffnet

thoeretisch sowas in der Art:


```
public class j2URL extends Applet implements ActionListener{

	public void init() {
		Button b = new Button("GOTO");
		b.addActionListener(this);
		add(b);

	}

	public static void start(String[] args) throws Exception {
		URL yahoo = new URL("http://lab/shorties/test.php");
		BufferedReader in = new BufferedReader(
					new InputStreamReader(
					yahoo.openStream()));

		String test = in.readLine();
		in.close();
	}

	public void actionPerformed(ActionEvent ae) {
		try
		{
			AppletContext a = getAppletContext();
			URL u = new URL(test);
			a.showDocument(u,"_blank");
		}
		catch (MalformedURLException e){
			System.out.println(e.getMessage());
		}
	}


}
```


Leider funktioniert das natürlich so nicht  - laut meinem netzwerksniffer wird auch die Url gar nicht eingelesen

Also, wie kann ich den Teil so umbennen, dass 1x beim start von dem Applet der Quelltext eingelesen wird.

Danke im vorraus für Hilfen!


----------



## Wildcard (17. Feb 2007)

Ein nicht signiertes Applet darf keine URL Connections aufbauen.


----------



## guwapo (17. Feb 2007)

achso - ist es aber sonst so richtig?


----------



## Wildcard (17. Feb 2007)

Nö, weil das nicht kompilieren würde, aber das muss dir der Compiler ja schon gesagt haben.


----------



## guwapo (17. Feb 2007)

ne errors gabs da nur wegen der Zeile mit "String test =..."

hab aber grad gesehen, dass das hier klappt: http://www.astrotexte.ch/applets/httpRequestor.html

Und da gehts auch ohne signifikation (es sei denn ich übersehe etwas). Allerdings nur auf URLs die gleich sind wie wo der applet liegt - aber das reicht mir ja.

Werds aber auf jedenfall nochmal lokal testen.


----------



## Wildcard (17. Feb 2007)

guwapo hat gesagt.:
			
		

> ne errors gabs da nur wegen der Zeile mit "String test =..."


Das hab ich auch gemeint  :wink: 


> Und da gehts auch ohne signifikation (es sei denn ich übersehe etwas). Allerdings nur auf URLs die gleich sind wie wo der applet liegt - aber das reicht mir ja.


Richtig, zum eigenen Server kannst du ohne Signatur verbinden, aber ist an deinem Code schlecht zu sehen ob du dich zum Applet Server verbinden willst oder nicht  :wink:


----------



## guwapo (18. Feb 2007)

aso ok Danke ersteinmal für die Hilfe - stimmt hätte ich dazu schreiben sollen.

bin nun soweit gekommen:


```
(...)
   public String sendRequest(String linkID) {
      URL url;
      try {
         url = new URL("https://lab/shorties/test.php?id=" + linkID);
         BufferedReader in = new BufferedReader(new InputStreamReader( url.openStream() ));
         AppletContext a = getAppletContext();
         URL u = new URL(in.readLine());
         a.showDocument(u,"_blank");         
         return null;
      }
      catch (Exception ex) {
         return ex.getMessage();
      }
   }
(...)
```

funktioniert auch alles wie ich es haben will - ohne probleme.

Allerdings wenn ich die .class Datei aufrufe sehe ich in "Plaintext" welche URL er Aufrufen will. Gibt es ne möglichkeit die .class Datei irgendwie zu schützen, oder irgendwie einen alternativen weg, sodass man die URL die aufgerufen wird nicht innerhalb der class Datei sieht? (darf allerdings auch nicht im html - als per String übergabe - stehen)


----------



## Wildcard (18. Feb 2007)

Du kannst versuchen die URL unkenntlich zu machen, letztlich ist es aber unmöglich die URL zu schützen.
Wenn du sie irgendwie verschlüsselts, musst du sie dennoch in deinem Programm wieder entschlüsseln um sie verwenden zu können.
Und selbst wenn du sie richtig gut versteckst, gibt ja immer noch Sniffer...


----------



## guwapo (18. Feb 2007)

Ja das stimmt. Habe mich ein bissel in das Thema "eingearbeitet" und anscheinend ist das wohl so bei Java. Man kann theoretisch nur noch versuchen mit nem "obfuscator" den Queltext zu verschleiern.

Kennt da jemand nen guten für Java-Applets? (hier ne Liste: http://java-decompiler.com/ - aber als Anfänger weiss man nicht welchen man nehmen soll)

Ja, dass stimmt natürlich wird man niemals URLs komplett verschlüsseln können (widerspricht den Sinn von TCP/IP), aber mittels SSL Verbindung kann ein Sniffer dann nur noch die Ziel-IP sehen - nicht mehr den /GET String einer HTTP Anfrage.

Es geht mir nur darum, dass man nicht mehr per Quelltext eine WeiterleitungsURL abfangen kann.


----------



## Wildcard (18. Feb 2007)

Mit Java hat das nichts zu tun.
Auch ein Obfuscator wird dir nichts nützen, da die URL ein String ist.


----------



## Illuvatar (18. Feb 2007)

Überleg dir das mal rein von einem logischen Standpunkt aus:

Das Applet läuft auf deinem Computer; das Applet soll auf Server XYZ zugreifen => Auf deinem Computer muss die sein, wie der Servre heißt => Du kannst auf die Information zugreifen...


----------



## guwapo (18. Feb 2007)

ja das stimmt wohl Illuvatar, schade, dann lässt sich JAVA wohl nicht für dieses Problem einsetzen.

Oder ich finde einen Weg, dass JAVA irgendwie selbst eine ID generiert die man nicht ohne weiteres einsehen kann. Dann wäre es egal das man die URL kennt - man weiss ja nicht wie man ne ID generiert..

Natürlich wäre selbst das nicht 100% sicher, aber fürs erste würde es mir denk/hoff ich reichen


----------



## Wildcard (18. Feb 2007)

Mal eine andere Frage, warum ist es so wichtig die URL 'geheim' zu halten?


----------



## Illuvatar (18. Feb 2007)

guwapo hat gesagt.:
			
		

> ja das stimmt wohl Illuvatar, schade, dann lässt sich JAVA wohl nicht für dieses Problem einsetzen.



Das Problem ist - das hat erstmal rein gar nichts mit der Programmiersprache zu tun. In C++ oder so gilt ja schließlich exakt das gleiche.

Erzähl vielleicht lieber mal, wofür du das brauchst. Vielleicht gibt es ja eine bessere Möglichkeit...


----------



## guwapo (18. Feb 2007)

> Das Problem ist - das hat erstmal rein gar nichts mit der Programmiersprache zu tun. In C++ oder so gilt ja schließlich exakt das gleiche.


hab ich beim durchlesen dieses Forums nun auch mitbekommen  


Wofür ich das ganze brauche:
Wenn man z.B. eine Downloadseite hat mit mehreren Downloadlinks, man will aber nicht das irgendein Bot/Skript die Downloadlinks "harvest"/"crawled", dann könnte man es ja mit Hilfe von so einem Java-Applet "verstecken".

Natürlich bekommt zwar jeder im Endeffekt die URL zu gesicht, aber das "abfangen" lässt sich nicht mehr so leicht bewerkstelligen.

Ähnlich wie bei solchen Services wie tinyurl.com - nur kann man da mittels PHP-Skript den "header -> location:" Eintrag auslesen.


D.h. ich würde per JS eine ID an das Applet übergeben -> Applet holt mithilfe dieser ID und einem php-skript, der auf dem Webserver liegt, die URL -> Applet öffnet nun ein neues Fenster mit der URL (also kein header:location)

Natürlich kann man sowas trotzdem automatisieren (proxy, sniffer, manche fw) dürfte aber umständlicher sein und für einen Laien ohne weiteres sowieso nicht möglich sein.


----------



## Wildcard (18. Feb 2007)

Wenn mich die rechtliche Lage jetzt nicht interessieren würde, würde ich das Antileech Applet dekompilieren  :lol:


----------

