Javascript Datei per PHP sichern

Operator_Jon

Erfahrenes Mitglied
Hallo,

ich konnte leider im Netz nicht wirklich etwas hierzu finden - ich versuche zu verstehen, auf welche Art und Weise diese Datei hier den Javascript Code absichert:

http://www.geckotribe.com/js/expop/ExPop-2-js.php

Mir ist eigentlich nur ein referrer Abgleich eingefallen, kann das vielleicht sein? Was denkt Ihr wie der Autor das gemacht hat?

/Edit: Oder muss man vielleicht eine PHP Datei einbinden die eine Variable setzt ohne die die Datei Ihren Content nicht freigibt?

Bitte nicht missverstehen: Es geht mir nicht darum den Code zu stehlen der in dieser Datei liegt, das kann ich spielend selbst programmieren. Es geht rein um die Methode wie der Code gesichert ist.

Vielen Dank schonmal für eure Meinungen :)

Schöne Grüße,
Jonathan
 
Hi

Es geht also darum, eine JS-Datei nur verwendbar zu machen, wenn sie als
Teil einer eigenen HTML-Seite verwendet wird, aber nicht so aufrufbar?

Vorneweg: Mit Firebug & Co kann man den Quelltext der gerade aktuellen Seite schön analysieren.
Solange man eine Seite anschauen kann, die diess JS verwendet...Folgende Methoden helfen
wirklich nur gegen direktes Aufrufen.


Referrer wäre eine (jedoch leicht fälschbare) Möglichkeit.

Mit PHP etwas vorbereiten geht schon eher in die richtige Richtung,
nur bringt eine einfache PHP-Variable nicht viel (da sie zwischen Aufruf
der eigentlichen Seite und Holen vom JS nicht bestehen bleibt)

Eine andere Möglichkeit:
Pro Seitenaufruf (pro Benutzung der Hauptseite eben) irgendeine möglichst eindeutige,
nicht von anderen erratbare und zeitlich nur beschränkt gültige ID erzeugen.
und die JS-Datei damit anfordern. Die ID dabei zB. als Get-Parameter übergeben, also
statt http://www.geckotribe.com/js/expop/ExPop-2-js.php zB. das einbinden:
http://www.geckotribe.com/js/expop/ExPop-2-js.php?id=jnd89j398j89edj87h87ezft
Eben mit immer neu generierter ID. Statt Get-Parameter könnte man auch ein Cookie nehmen usw.
Wenn die ID schon nicht vorhanden oder zu alt ist, eben kein JS liefern.

Zum zeitlichen Beschränken:
Prinzipiell einfach, aber suboptimal: Eine Liste der ausgegebenen IDs speichern (Datenbank...) und alle
xy Sekunden oder so leeren. (ein paar Sekunden reichen, weil das JS normalerweise kurz
nach der Hauptseite vom Browser geholt werden sollte)

Alternative, ohne Listen zu speichern: Timestamp und Hashvon Timestamp mit Salt.
Genauer: Die ID besteht aus zwei Teilen (getrennt mit irgendeinem Trennzeichen, oder zwei
Get-Parameter statt einer oder so): Teil 1 ist die aktuelle Zeit/Datum (als Timestamp, also
einzelne Zahl) ("aktuell" beim Generieren in PHP)
Dann gibt es in der PHP-Datei irgendein langes, kompliziertes Passwort (muss sich niemand merken),
sagen wir, es ist in der Variable $salt, und der Timestamp in $ts.
Teil 2 wird dann berechnet durch
PHP:
password_hash($ts . $salt, PASSWORD_DEFAULT);

Zum Prüfen, ob die beiden Werte stimmen (in der JS-PHP-Datei dann eben)
berechnet man die selben Sachen, aber mit dem Timestamp von Wert 1 statt dem
aktuellen Timestamp. Nur wenn Timestamp noch nicht zu alt ist und der übergebene
zweite Teil mit dem Berechneten übereinstimmt...

(Einen Zeitpunkt angeben, der neu genug ist, kann jeder. Aber die dazupassende zweite
Hälfte kann man nur mit dem geheimen Salt/Passwort berechnen. Auch wenn man zwei
passende Hälften hat hilft einem das nicht, die fehlende Hälfte für andere Timestamps
zu berechnen)
 
Zuletzt bearbeitet:
Hi sheel,

vielen Dank für deine ausführliche Antwort. Auf die von dir beschriebene Art und Weise habe ich auch schonmal ein IFrame Script geschützt welches oft von anderen geklaut wurde.

Was mich an dem verlinkten eigentlich beeindruckt hat, ist das ich den Quellcode eben nicht per Firebug auslesen konnte, das war natürlich auch mein erster Gedanke das das geht. Aber scheinbar war ich dann nur zu unfähig das zu tun!

Würde es dir etwas ausmachen kurz zu erklären wie es geht, jetzt interessiert es mich ja dann doch.

Den Timestamp noch mit einem salt zu hashen ist auf jeden Fall ein guter Ansatz. Ansonsten wäre doch eine ID-Übergabe auch per Session möglich um dem "verspäteten" Aufruf des Scriptes entgegenzuwirken oder?

Nochmals Danke für die Ausführlichkeit, das ist wirklich nicht selbstverständlich!

Schöne Grüße,

Jonathan
 
:)
Ansonsten wäre doch eine ID-Übergabe auch per Session möglich um dem "verspäteten" Aufruf des Scriptes entgegenzuwirken oder?
Ja, ist nur eben wieder ein Cookie (normalerweise)
das ich den Quellcode eben nicht per Firebug auslesen konnte,
Grade ausprobiert, geht.
Firebug einschalten, zum Scriptpanel wechseln, ggf. Scriptpanel einschalten,
http://www.geckotribe.com/expop/ laden und ober dem Haupttextfeld
bei der Dateiauswahl die ExPop-2-js.php aussuchen
(und die Scrollleiste beachten. Die Copyrightmeldung ist auch bei der vollen Datei oben)
 
Was denkt Ihr wie der Autor das gemacht hat?
Der Autor prüft da offensichtlich nur ob überhaupt ein referer gesetzt ist(egal welcher), das ist alles.

Zum Testen:

PHP:
<?php
  echo htmlentities(
  file_get_contents('http://www.geckotribe.com/js/expop/ExPop-2-js.php',
  false,
  stream_context_create(
  array('http'=>array('method'=>'GET',
  'header'=>"Referer: http://foo.bar\r\n")))
  )
  );
?>

Im Grunde genommen Kinderkram.
 
Zuletzt bearbeitet:
Danke sheel, jetzt klappt es witzigerweise, das gleiche habe ich vorher auch schon gemacht. Das hat das ganze dann auch schon entzaubert, abuzze da hast du dann natürlich Recht, dieser Schutz ist Kinderkram.

Danke euch beiden für die Antworten, Thema erledigt :)
 
Zurück