Rolf Roessel: include () Problem

Hallo

man kann ja mit include() in einem Script ein Script aufrufen was auf dem gleichen Server liegt, jetzt suche ich aber eine möglichkeit ein Script auf einem fremden Server abzurufen damit dieses ausgeführt wird, geht sowas ?

Habe es mal mit include() getestet aber ohne Erfolg.

Rolf Roessel

  1. Hi Rolf,

    Habe es mal mit include() getestet aber ohne Erfolg.

    wie sah dein Code aus?

    include kann fremde Scripte einbinden, allerdings werden sie auf dem fremden Server ausgeführt. Was passiert, wenn dieser es nicht kann, weiss ich nicht genau.
    Ansonsten kannst Du noch fopen uä. probieren, letztendlich werden aber alle diese Funktionen das Script schon vorher ausführen.
    Was willst Du denn genau erreichen...?

    ciao
    romy

    1. wie sah dein Code aus?

      Habe den Aufruf wie folgt gemacht
      include("http://www.xyz.de/array.php");

      Was willst Du denn genau erreichen...?

      Ich möchte das diese Zeile darüber auf meinem Server eingelesen wird von einem Script was auf einem anderen Server läuft

      $buchstaben= array('A'=> '1','a'=> '1','B'=> '2','b'=> '2');

      Da sich die Werte immer wieder ändern, möchte ich diese zentral verwalten auf meinem Server ohne das man auf den anderen Server die Scripte austauschen muß.

      Gruß Rolf

      1. Hi Rolf,

        Ich möchte das diese Zeile darüber auf meinem Server eingelesen wird von einem Script was auf einem anderen Server läuft
        $buchstaben= array('A'=> '1','a'=> '1','B'=> '2','b'=> '2');

        ich weiss nicht wie gut die Lösung jetzt ist, aber es sollte erstmal kein Problem sein, diese Datei nicht als PHP abzuspeichern (sonder .inc oder .txt) und dann mit eval() auszuführen. Beachte bitte alle Sicherheitslücken die dadurch enstehen.

        Ausserdem ist es doch auch zentral, wenn es auf dem anderen Server ausgelagert liegt, oder?

        ciao
        romy

  2. Hi!

    man kann ja mit include() in einem Script ein Script aufrufen was auf dem gleichen Server liegt, jetzt suche ich aber eine möglichkeit ein Script auf einem fremden Server abzurufen damit dieses ausgeführt wird, geht sowas ?

    Es geht schon, aber vermutlich nicht so wie Du es Dir vorstellst. Wenn Du mit PHP per HTTP auf einen fremden Server zugreifst, dann bekommt PHP genau das zu Gesicht was Du im Browser zu Gesicht bekommen würdest, denn beide verwenden ja das gleiche Protokoll, das heißt der 2. Server weiß nicht ob die Anfrage von einem PHP-Script oder einem Browser kommt. Das heißt wenn Du das PHP-Script auf dem anderen Server aufrufst und es erzeugt keine Ausgabe, dann bekommt PHP halt eine leere Datei. Wenn Du willst dass Dein lokales PHP wirklich den Quellcode einbindet, dann sorge dafür dass das entfernte Script auch PHP-Code ausgibt. Wenn Du das Script in .txt umbenennst bekommst Du im Browser PHP-Code zu Gesicht, und PHP eben auch. Anders geht es nicht über HTTP. Wenn Du nicht willst dass jeder Zugriff auf das Script per Browser hat, dann musst Du Dich irgendwie auf dem Server authentifizieren, z.B. über einen GET-Parameter der am Anfang des Scriptes geprüft wird. Oder Verwende ftp.

    Habe es mal mit include() getestet aber ohne Erfolg.

    Was heißt ohne Erfolg? Was genau ist passiert oder hat nicht geklappt?

    Grüße
    Andreas

    1. hi,

      Wenn Du willst dass Dein lokales PHP wirklich den Quellcode einbindet, dann sorge dafür dass das entfernte Script auch PHP-Code ausgibt. Wenn Du das Script in .txt umbenennst bekommst Du im Browser PHP-Code zu Gesicht, und PHP eben auch.

      aber dieser php-code wird dann nicht ausgeführt, oder?
      dazu wäre dann immer noch ein eval() o.ä. erforderlich.

      gruss,
      wahsaga

      1. Hi!

        aber dieser php-code wird dann nicht ausgeführt, oder?
        dazu wäre dann immer noch ein eval() o.ä. erforderlich.

        Nein, AFAIK nicht. Ich habe es aber noch nie probiert, ich würde für sowas lieber eine vernünftige Schnittstelle schreiben.

        Grüße
        Andreas

        1. hi,

          ich würde für sowas lieber eine vernünftige Schnittstelle schreiben.

          dieser aussage kann man sich unabhängig davon, ob die andere frage mit ja oder nein zu beantworten wäre, nur anschliessen :-)

          gruss,
          wahsaga

  3. Danke erstmal, werde das mit eval() mal testen. Es geht nur darum das diese Zeile Daten enthält die keiner mitbekommen soll und mein Kapital sind damit ich diese Scripte vertreiben kann.

    Habe leider nichts gefunden um diese Zeile zu verschlüsseln und deshalb muß ich einen anderen Weg finden.

    Gruß Rolf

    1. Hi!

      Danke erstmal, werde das mit eval() mal testen.

      Das Problem ist nicht das Ausführen auf Deinem Server, sondern die Übertragung des PHP-Codes auf Deinen Server. Willst Du das über HTTP machen, dann muss der PHP-Code für jeden sichtbar auf dem Webserver liegen, und darf vor der Ausgabe nicht geparst werden, also z.B. als .txt.

      Es geht nur darum das diese Zeile Daten enthält die keiner mitbekommen soll und mein Kapital sind damit ich diese Scripte vertreiben kann.

      OK, das hate ich ja angesprochen, Du brauchst eien Authentifizierung.

      lies mal:
      http://de3.php.net/manual/de/function.include.php
      http://de3.php.net/manual/de/features.remote-files.php

      Da steht sogar dass man HTTP-Auth Username und Passwort in die URL schreiben darf, also ist das ganze recht komfortabel möglich.

      Ich würde es so machen:

      server1.de ist der Server auf dem das Script mit include() liegt,
      server2.de ist der Server auf dem der einzubindene PHP-Code steht.

      auf server2.de legst Du ein verzeichnis an, z.B. "geheim", welches über

      http://www.server2.de/geheim erreichbar ist. Da legst Du eine .htaccess rein und führst darin eine Authentifzierung durch(Basic-Auth.), sagen wir mal der Benutzernamen lautet "hans" und das Passwort "streng_geheim" (teste erst ob es im Browser funktioniert!).

      in das Verzeichnis geheim legst Du eine Datei "test.txt" mit folgendem Inhalt:

      <?php
      echo 'Hallo';
      ?>

      Dann schreibst Du in das Script auf server1.de folgendes:

      include 'http://hans:streng_geheim@www.server2.de/geheim/test.txt';

      Das fühst Du dann aus und sagst uns ob da dann "Hallo" steht oder nicht.

      Habe leider nichts gefunden um diese Zeile zu verschlüsseln und deshalb muß ich einen anderen Weg finden.

      Das einfachste ist es wie oben beschrieben über Authentifzierung.

      Grüße
      Andreas

    2. Moin!

      Danke erstmal, werde das mit eval() mal testen. Es geht nur darum das diese Zeile Daten enthält die keiner mitbekommen soll und mein Kapital sind damit ich diese Scripte vertreiben kann.

      Mit anderen Worten: Du willst auf _deinem_ Server zentral Benutzerlizenzen verwalten von einer PHP-Applikation, die an Kunden verkauft wird.

      Vergiß es! Das wird niemals wirklich funktionieren.

      Gegen diese Methode gibt es reichlich Angriffs- und Umgehungsmethoden. Denn du lieferst ja sicherlich PHP-Klartext aus. Also steht auch deine Funktion drin, die die Lizenzdaten nachlädt. Und die kann man ganz simpel ausbauen. Oder die Daten manuell einfügen, indem die Nachfrage nach den Lizenzdaten einfach durch den dadurch gelieferten Code ersetzt wird.

      Habe leider nichts gefunden um diese Zeile zu verschlüsseln und deshalb muß ich einen anderen Weg finden.

      Auch Verschlüsseln der Zeile wird nichts bringen. Auf dem Kundenserver mußt du ja schließlich den gesamten Code inkl. Schlüssel zum Entschlüsseln der Daten mitliefern.

      Deine Aufgabenstellung ist im Grunde genommen genauso zu bewerten, wie die Aufgabenstellung, mit Javascript im Browser einen _sicheren_ Passwortzugang zu realisieren. Diese Aufgabe ist einfach nicht lösbar.

      Die Tatsache, dass dir die Mechanismen eines include() über HTTP nicht wirklich klar sind, zeigt mir jedenfalls, dass du dir keinen wirklich komplizierten Lizenzschlüsselmechanismus ausdenken wirst können.

      Du solltest stattdessen vielleicht eher die subtile Methode anwenden: Gib jedem Kunden eine individuelle Version deiner Software mit einer entsprechenden Lizenznummer. Diese Lizenznummer mußt du subtil in die HTML-Ausgabe deines Skriptes schmuggeln - und zwar nicht irgendwie am Stück, sondern schön unauffällig verteilt. Beispielsweise bietet es sich an, einen CSS-<style>-Block in jeder Seite zu definieren, und dort Teile der Nummer in einer ungenutzten Klassendefinition unterzubringen, beispielsweise als Farbcode der Hintergrundfarbe. Oder (noch besser) als Farbcode eines 0px-Borders (weil: Sieht ja niemand). Oder du definierst zuerst einen margin allgemein, und dann nochmal margin-left, -right, etc. extra. Im überflüssigen margin stehen dann ebenfalls Lizenzdaten drin. Oder du benutzt die Klassen- und ID-Namen selbst für Teile der Lizenznummer - die dürfen dann sogar verwendet werden.

      Wenn du die Lizenznummer auf diese Weise subtil verteilst, fällt sie viel weniger auf. Damit du keine Aufmerksamkeit erregst, muß diese Nummer allerdings statisch in den PHP-Skripten eingebaut sein, es darf dort keine Funktion "get_partof_license()" geben. Dazu mußt du die Teile, die subtile Lizenznummern enthalten sollen, dynamisch als Datei generieren und dann ausliefern.

      Der Effekt ist dann, dass du die Weitergabe deiner Software anhand der subtilen Lizenznummer sehr leicht beweisen kannst, wenn du darauf stößt. Denn es dürfte unwahrscheinlich sein, dass sich jemand in Unkenntnis der subtilen Lizenznummern die Mühe macht, den gesamten Code durchzuackern.

      Natürlich mußt du auf eine weitergegebene Software selber stoßen. Aber deine bisherige Vorgehensweise arbeitet sehr auffällig, indem dein Server kontaktiert wird. Das wird im Zweifel auffallen und leicht entfernt werden können.

      - Sven Rautenberg

      --
      SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
      ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|