Flashdateien schützen
Wie jeder Künstler und Schaffende, sieht sich auch der Webmaster einer Horde von Menschen gegenüber, die sich gerne mit fremden Federn schmücken. Vielleicht ist ein Webmaster solchen unrechten Machenschaften sogar häufiger ausgesetzt als so manch Anderer. Dies mag an der Leichtigkeit liegen, mit der ein fremdes Bild, ein Text oder aber auch eine Flashdatei von einer Webseite heruntergeladen und auf der eigenen Webseite publiziert werden kann. Leider kann man solche Gaunereien nicht komplett unterbinden. Sobald Sie Ihre Werke im Internet veröffentlichen, nehmen Sie unweigerlich in Kauf, dass diese auch „geklaut“ werden. So besteht bei einem Text gar keine Möglichkeit eines Schutzes. Bei einem Bild können Sie immerhin durch kleine Tricks wie einem Wasserzeichen den Datenklau eindämmen. Ein fortgeschrittener Anwender in Grafikprogrammen wird ein solches Wasserzeichen jedoch ohne weiteres entfernen können. Alle weiteren Schutzmechanismen mögen dem unerfahrenen Leser eine Hürde sein, sind jedoch bei einem fortgeschrittenen Anwender ebenso wirkungslos. So verhält es sich leider auch im Flash-Bereich. Leider können wir an dieser Stelle keinen perfekten Schutz anbieten. Ein erfahrener Benutzer wird trotz der vorzustellenden Schutzmaßnahmen die Möglichkeit besitzen, die Mechanismen zu umgehen bzw. diese abzuschalten.
Um zu verhindern, dass Ihre Flashdatei auf fremden Webseiten angeboten wird, reicht eine einfache Überprüfung der URL im ersten Bild der Zeitleiste. Das zweite Bild wollen wir für das Fehlschlagen der Überprüfung reservieren. Die eigentliche Flash-Animation soll ab dem dritten Bild beginnen. Platzieren Sie im ersten Bild der Zeitleiste folgenden ActionScript:
Die zulässige Domain wird in einer Variable “sollDomain” erfasst. Eine zweite Variable, „istDomain“, nimmt die aktuelle URL auf. Dabei schneiden wir das übliche „http://“ mit Hilfe der Funktion „substr“ ab. In einer IF-Struktur überprüfen wir nun, ob die aktuelle mit der zugelassenen Domain übereinstimmt. Schlägt der Vergleich fehl, so gehen wir in das zweite Bild der Zeitleiste und stoppen die Animation. In diesem Bild sollten Sie einen entsprechenden Hinweis platzieren, dass die Flashdatei auf einem nicht erlaubten Webserver ausgeführt wurde.
Im Erfolgsfall springt die Animation in das dritte Bild. Bisher sperren wir unsere Flash-Animation nicht nur für andere Webseiten, sondern ebenso für das lokale Betrachten. Dies ist jedoch nicht unsere Absicht gewesen, da wir ja nur verhindern wollten, dass sich fremde Personen mit unseren Federn schmücken. Mit einer kleinen Erweiterung unserer IF-Struktur können wir unseren „Fehler“ beheben:
Zum Verständnis müssen wir kurz auf das Verhalten von „this._url“ eingehen. Führen wir die Flashdatei auf dem lokalen Rechner aus, so gibt die Anweisung den Pfad zur Datei zurück. Während wir im Internet eine Domain beginnend mit der Zeichenfolge „http“ erhalten, beginnt die Zeichenkette bei einer lokalen Betrachtung mit der Zeichenfolge „file“. Es reicht also aus, mit Hilfe der Funktion „substr“ die ersten vier Buchstaben auf die Zeichenfolge „file“ zu überprüfen.
Da wir uns zu einer Überprüfung der Domain und nicht des kompletten Dateipfades entschieden haben, ist die genaue Ordnerstruktur, in der sich unsere Flashdatei befindet, glücklicherweise irrelevant. Sollten jedoch mehrere Domains auf unsere Webseite verweisen, so können weiterhin nur diejenigen Besucher unsere Datei betrachten, die mit der zugelassenen Domain in der Adresszeile unsere Datei angesteuert haben. Um auch letzteres Problem zu umgehen, legen wir ein Array mit einer beliebig langen Liste von zugelassenen Domains an. Durch das Array muss natürlich auch die Bedingung in der IF-Struktur angepasst werden. Hierfür definieren wir eine kleine Hilfsfunktion:
Die Funktion „in_array“ überprüft, ob die Zeichenfolge „needle“ im Array „haystack“ vorhanden ist und gibt im Erfolgsfall „true“ zurück. Ansonsten liefert die Funktion als Rückgabewert „false“. Mit Hilfe dieser Funktion ist die Anpassung des ursprünglichen ActionScripts schnell erledigt. In der IF-Bedingung rufen wir die Hilfsfunktion zusammen mit der aktuellen Domain als ersten Parameter, sowie dem zuvor definierten Array „domains“ als zweiten Parameter auf. Das Array „domains“ wurde zuvor mit den zugelassenen Domains angelegt.
Die erweiterte Struktur musste mit einer komplexeren Überprüfung der aktuellen Domain erkauft werden. Durch das Zulassen mehrerer Domains mit einer unterschiedlichen Zeichenlänge reicht die alte Methode zum Extrahieren der Domain mittels „substr“ nicht mehr aus. Um weiterhin mögliche Ordner- und Dateinamen von der Domain zu trennen, benötigen wir die Funktion „split“, die eine Zeichenkette an Hand des angegebenen Trennzeichens in Teilzeichenketten aufteilt und diese anschließend in einem Array speichert.
Um dem Benutzer keine Hintertüren offen zu lassen, sollten Sie bei der Veröffentlichung der Flashdatei die Option „Vor Import schützen“ aktivieren und im Register „HTML“ die Einstellung „Menü anzeigen“ deaktivieren.
Beispieldatei: Einfacher Dateischutz [Flashdateien_schuetzen1.zip]
Beispieldatei: Erweiteter Dateischutz [Flashdateien_schuetzen2.zip]
Um zu verhindern, dass Ihre Flashdatei auf fremden Webseiten angeboten wird, reicht eine einfache Überprüfung der URL im ersten Bild der Zeitleiste. Das zweite Bild wollen wir für das Fehlschlagen der Überprüfung reservieren. Die eigentliche Flash-Animation soll ab dem dritten Bild beginnen. Platzieren Sie im ersten Bild der Zeitleiste folgenden ActionScript:
001:002:003:004:005:006:007:008:
sollDomain = "www.domain.de"; istDomain = this._url.substr(7, sollDomain.length); if (sollDomain == istDomain) { gotoAndPlay(3); } else { gotoAndStop(2); }
Die zulässige Domain wird in einer Variable “sollDomain” erfasst. Eine zweite Variable, „istDomain“, nimmt die aktuelle URL auf. Dabei schneiden wir das übliche „http://“ mit Hilfe der Funktion „substr“ ab. In einer IF-Struktur überprüfen wir nun, ob die aktuelle mit der zugelassenen Domain übereinstimmt. Schlägt der Vergleich fehl, so gehen wir in das zweite Bild der Zeitleiste und stoppen die Animation. In diesem Bild sollten Sie einen entsprechenden Hinweis platzieren, dass die Flashdatei auf einem nicht erlaubten Webserver ausgeführt wurde.
Im Erfolgsfall springt die Animation in das dritte Bild. Bisher sperren wir unsere Flash-Animation nicht nur für andere Webseiten, sondern ebenso für das lokale Betrachten. Dies ist jedoch nicht unsere Absicht gewesen, da wir ja nur verhindern wollten, dass sich fremde Personen mit unseren Federn schmücken. Mit einer kleinen Erweiterung unserer IF-Struktur können wir unseren „Fehler“ beheben:
001:
if (sollDomain == istDomain || this._url.substr(0, 4) == "file") { … }
Zum Verständnis müssen wir kurz auf das Verhalten von „this._url“ eingehen. Führen wir die Flashdatei auf dem lokalen Rechner aus, so gibt die Anweisung den Pfad zur Datei zurück. Während wir im Internet eine Domain beginnend mit der Zeichenfolge „http“ erhalten, beginnt die Zeichenkette bei einer lokalen Betrachtung mit der Zeichenfolge „file“. Es reicht also aus, mit Hilfe der Funktion „substr“ die ersten vier Buchstaben auf die Zeichenfolge „file“ zu überprüfen.
Da wir uns zu einer Überprüfung der Domain und nicht des kompletten Dateipfades entschieden haben, ist die genaue Ordnerstruktur, in der sich unsere Flashdatei befindet, glücklicherweise irrelevant. Sollten jedoch mehrere Domains auf unsere Webseite verweisen, so können weiterhin nur diejenigen Besucher unsere Datei betrachten, die mit der zugelassenen Domain in der Adresszeile unsere Datei angesteuert haben. Um auch letzteres Problem zu umgehen, legen wir ein Array mit einer beliebig langen Liste von zugelassenen Domains an. Durch das Array muss natürlich auch die Bedingung in der IF-Struktur angepasst werden. Hierfür definieren wir eine kleine Hilfsfunktion:
001:002:003:004:005:006:007:008:009:010:011:012:013:014:015:016:017:
domains = Array("www.domain1.de", "www.domain2.de"); istDomain = this._url.substr(7, this._url.length - 7); istDomain = istDomain.split("/"); if (in_array(istDomain[0], domains) || this._url.substr(0, 4) == "file") { gotoAndStop(3); } else { gotoAndStop(2); } function in_array(needle, haystack) { for(var i = 0; i < haystack.length; i++) { if (haystack[i] == needle) return true; } return false; }
Die Funktion „in_array“ überprüft, ob die Zeichenfolge „needle“ im Array „haystack“ vorhanden ist und gibt im Erfolgsfall „true“ zurück. Ansonsten liefert die Funktion als Rückgabewert „false“. Mit Hilfe dieser Funktion ist die Anpassung des ursprünglichen ActionScripts schnell erledigt. In der IF-Bedingung rufen wir die Hilfsfunktion zusammen mit der aktuellen Domain als ersten Parameter, sowie dem zuvor definierten Array „domains“ als zweiten Parameter auf. Das Array „domains“ wurde zuvor mit den zugelassenen Domains angelegt.
Die erweiterte Struktur musste mit einer komplexeren Überprüfung der aktuellen Domain erkauft werden. Durch das Zulassen mehrerer Domains mit einer unterschiedlichen Zeichenlänge reicht die alte Methode zum Extrahieren der Domain mittels „substr“ nicht mehr aus. Um weiterhin mögliche Ordner- und Dateinamen von der Domain zu trennen, benötigen wir die Funktion „split“, die eine Zeichenkette an Hand des angegebenen Trennzeichens in Teilzeichenketten aufteilt und diese anschließend in einem Array speichert.
Um dem Benutzer keine Hintertüren offen zu lassen, sollten Sie bei der Veröffentlichung der Flashdatei die Option „Vor Import schützen“ aktivieren und im Register „HTML“ die Einstellung „Menü anzeigen“ deaktivieren.
Beispieldatei: Einfacher Dateischutz [Flashdateien_schuetzen1.zip]
Beispieldatei: Erweiteter Dateischutz [Flashdateien_schuetzen2.zip]