Hallo Martin,
<a href="javascript:ops('v/cygcyg')"><img …></a>
"v" ist der Ordner, in dem die MP3-Dateien mit Vogelstimmen liegen (es gibt auch noch Ordner für Amphibien und Heuschrecken); "cygcyg" ist das Kürzel für den Singschwan.
Das Argument an die Funktion ops
ist also Teil eines Pfads.
Mit der Funktion ops() wird eine HTML-Datei aufgerufen:
function ops(daten) { url = "spsnd.htm?art=" + daten; popsnd = window.open(url, "snd", "status=no,width=300,height=160,left=60,top=60"); popsnd.focus(); }
Der Pfad wird hier als Inhalt der Variablen daten
also als Wert des URL-Parameters art
Teil des Querystrings.
Ein JS innerhalb des Dokuments soll dann den Inhalt der Seite „zusammenbauen“:
<head> <meta charset="utf-8" /> <title>Tonaufnahme</title> <script type="text/javascript" language="JavaScript" src="scripts/busnd.js"></script> </head> <script language="JavaScript"> <!-- str = window.location.search; // String ab dem Fragezeichen (Beispiel: ?art=v/cygcyg) tmp = str.split("="); // teilt str am Gleichheitszeichen
tmp
ist ein Array: tmp = ['?art', 'v/cygcyg']
path = tmp[1]; // String nach dem Gleichheitszeichen art = path.substr(2); // String nach dem 2. Zeichen (Beispiel: cygcyg) mp3 = "sound/arten/" + path + ".mp3"; text = eval(art);
Sofern die Content-Security-Policy (CSP) das zulässt, würde hier der Inhalt der Variablen art
ausgewertet, in deinem Fall der Inhalt der Variablen cygcyg
zurückgegeben.
Neben dem Punkt mit der CSP frage ich mich gerade, was passiert, wenn ich die Seite mit ?art=alert(%22XSS%22)
aufrufe …
Das hat auch mal funktioniert – aber eine Überprüfung nach einer längeren Pause ergab, dass jetzt nur noch ein leeres Fenster geöffnet wird. Durch Testen konnte ich herausfinden, dass das an der eval-Funktion liegt (die ja, wie ich inzwischen weiß, nicht mehr verwendet werden soll). Nun suche ich nach einer Alternative und habe auch schon im Netz danach gesucht, konnte aber nichts passendes finden.
Was zeigt dir eigentlich die JavaScript-Konsole der Browser-Entwicklertools (Drücken der Taste F12) dazu an? Ansonsten gibt es ja schon eine Idee.
Viele Grüße
Robert