kostenloser Webspace werbefrei: lima-city


PHP Script aus Script aufrufen und unabhängig ausführen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    t-bone

    t-bone hat kostenlosen Webspace.

    EDIT: Lösung im letzten Post von mir.

    Ich wende mich an euch um mein Problem zu lösen. Per Google habe ich keine Lösung gefunden.

    Folgendes.
    Ich möchte eine Seite zur Verfügung stellen über welche man Dateien von einem Server beziehen kann.
    Um eine Datei beziehen zu können muss ich mich über eine API anmelden.
    Das Funktioniert indem ich an eine URL per GET Username und Passwort und Dateiname übergebe.
    Ich leite nun per header(location: ...) weiter aber man kann den Usernamen und das Passwort mit
    einem Programm auslesen welches die HTTP verbindungen mitschneidet.

    Das soll natürlich nicht Ziel des Scripts sein das ich Passwörter für Server weitergebe.
    Nachdem ich die letzten zwei Tage vergeblich nach einer Lösung gesucht habe wie man das verhindern kann
    bin ich lediglich auf readfile() gestossen welches aber den Nachteil hat das doppelter Traffic entsteht.
    (Einmal vom Server B zum Server A und dann vom Server A zum Benutzer)

    Dieser Weg ist keinesfalls eine Lösung.
    Dann kam mir heute (bzw gestern noch :) ) eine Idee. Die API lässt mich auch das Passwort zum Account ändern.
    Ich dachte ich leite per header() weiter , der Download startet und darauf änder ich das Passwort in einen
    Zufallsstring.

    Ich probierte es in etwa so:

    <?php
    header("Location: http://.....");
    
    $new_password = fopen("http://....");
    
    ?>


    und so
    <?php
    ignore_user_abort(true);
    
    header("Location: http://.....");
    flush();
    
    sleep(2);
    $new_password = fopen("http://....");
    
    ?>


    Das Funktioniert natürlich nicht.
    Das Passwort wird geändert und dann erst wird zur Datei weitergeleitet.
    Da sich das Passwort dann aber schon geändert hat ist der Link dann nicht mehr gültig.

    Jetzt zur Frage: Ist es möglich das ich in Script A den Header mit der Weiterleitung setze und
    dann Script B aufrufe ohne das Script A darauf wartet das B abgearbeitet wurde?

    Ich dachte mir in Script B führe ich etwas Zeitversetzt den Befehl aus zum ändern des Passwortes ( nach 1-2 Sekunden)
    während der Download schon läuft.

    Ich bin für jeden Tipp oder andere Ideen dankbar.

    Ich wünsch einen schönn morgen
    T-Bone


    Beitrag zuletzt geändert: 8.4.2011 19:47:10 von t-bone
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ohne es genau zu wissen, würde ich behaupten, dass du keine Möglichkeit hast, Sniffer zu umgehen.

    Das Einzige, was man tun könnte wäre, dass du auf deinem Server/Webspace eine Datei hinterlegst, die die Verbindung vornimmt. Was auf deinem Server passiert, kann kein Sniffer auslesen. Du sendest im Prinzip nur den Namen der Datei und andere, wichtige aber nicht geheime Parameter an dieses Script und schon bist du auf der sicheren Seite.

    Bin noch nicht ganz dahinter gestiegen, was genau du vorhast. Willst du ein Script aushändigen (verschlüsselt?), oder was genau hast du vor?

    Beitrag zuletzt geändert: 6.4.2011 5:06:48 von fabo
  4. Autor dieses Themas

    t-bone

    t-bone hat kostenlosen Webspace.

    Ich möchte dem User Dateien von einem Server zur Verfügung stelllen.
    Dieser Server schützt die Dateien vor direktem Zugriff, man kommt nur über die API an die Dateien und die
    API verlangt Login Daten.
    Das ich das Auslesen der Login Daten nicht verhindern kann wenn ich per header(location: ...); weiterleite
    weiss ich mittlerweile.

    Ich kann aber über die API auch das Passwort ändern. Dazu ruf ich nochmal die URL zur API mit fopen auf - das kann
    man nicht sehen oder täusche ich mich?

    Ich setze also bei der header() Weiterleitung den Link zur API rein mit den aktuellen Zugangsdaten und dem Dateinamen
    und der Download startet.
    Nachdem der Download gestartet bzw nachdem der Speichern Dialog geöffnet wurde möchte ich das Passwort ändern.

    Das geht aber nicht im selben Script denn wenn ich das mache wird das Passwort geändert bevor der Header gesendet wurde
    der weiterleiten soll und so ist der Weiterleitungslink nicht mehr korrekt das sich das Passwort vor der Weiterleitung ja geändert hat.

    Ich suche eine Möglichkeit den Download Link genieren zu lassen , den User dahin weiterzuleiten und danach das Passwort zu ändern.
    Dafür möchte ich aus dem Script welchen den Download Link generiert heraus ein weiteres PHP Script aufrufen
    ohne das das Download-Link Script auf das andere Script wartet.

    Das Script zum Passwort ändern kann ich ja mit sleep() 1-2 Sekunden schlafen lassen bevor das Passwort geändert wird.
    Das mit sleep funktioniert nicht wenn ich es mit in das Download-Link Script integriere da
    das Script wie gesagt wartet bis es zuende ausgeführt wurde bevor der Header mit der Weiterleitung geschickt wird.

    Ich hoffe das ist verständlich obwohl ich selbst schon dran zweifel :)

    Danke für die Hilfe ;)


  5. Ich bin mir nicht sicher, aber vielleicht ist ein Proxy-Skript die Lösung, die du suchst... Suche mal in der Suchmaschine deiner Wahl danach.
  6. m******e

    fabo schrieb:
    Bin noch nicht ganz dahinter gestiegen, was genau du vorhast.

    ^^ ich habs auch mehrfach lesen müssen :lol:

    Nach einigen :confused: im Kopf & 1k Versuchen :biggrin: frage ich mal zusammenfassend nach:
    - Über eine Webseite auf Server A soll auf geschützte Dateien von Server B zugegriffen werden können,
    - und zugleich soll nach dem Zugriff auf Server B das Passwort geändert werden?


    Sofern allow_url_include erlaubt ist, gehts zB über include.
    Testweise liegt hier eine Datei in einem geschützten Bereich.


    *.php auf Server A greift darauf zu:
    <?
    $Name = 'total';
    $Passwort = 'geheim';
    header('Content-type: application/zip');
    header('Content-Disposition: attachment; filename="datei.zip"');
    @include 'http://'.$Name.':'.$Passwort.'@free01.fr.funpic.de/verzeichnis/datei.zip';
    @include 'http://ServerB.TLD/new_password.php'; // falls Name & PW geändert werden sollen
    ?>

    new_password.php auf Server B
    <?
    sleep(xy);
    $new_password = fopen("http://...."); // usw.
    ?>

    Nun muß "new_password.php" von Server B nur noch Server A $Name & $Passwort mitteilen, der es dann iwo speichert.

    Ziemlich einfach wäre ´türlich eine DB, auf die beide Server Zugriff haben.
    Jedoch gehts auch mit ´ner .txt -Datei in geschützten Bereichen.

    Ggf muß jeweils header('Content-type: application/zip'); auf Server A angepasst werden.

    Right? :wink:
  7. Autor dieses Themas

    t-bone

    t-bone hat kostenlosen Webspace.

    Ich habe leider nicht die möglichkeit auf dem Server mit den Dateien ein PHP Script ausführen zu lassen.

    Lediglich das beziehen der Dateien über die API ist möglich.
    Das mit dem Include ist auch keine Lösung denn dann habe ich wieder den doppelten Traffic.

    Ich fass nochmal kurz Zusammen :

    Auf Server B liegen die Dateien. Auf Server A läuft mein PHP Script für den Download von Server B.

    Den Download starte ich indem ich Usernamen, Passwort und Dateiname per GET an die API Adresse vom Server B übergebe.
    Um das in gang zu setzen nutze ich header("Location: http://api.serve-adresse.de/?action=downlod&login=username&password=password");.
    Programme die HTTP Verbindungen überwachen zeigen dann die komplette URL an inklusive Username und Passwort.
    So wäre es möglich den Zugang zum Server zu ändern und mich auszuschließen - das soll nicht passieren.

    Nachdem der Download gestartet wurde soll das Passwort geändert werden. Das Funktioniert wie das starten des Downloads indem
    ich Username , Passwort und Neues Passwort per GET übergebe.
    Statt dies auch per header("Location: ..."); zu machen nehme ich fopen() da dies nicht von HTTP Überwachungsprogrammen
    mitgeschnitten werden kann und so das neue Passwort nicht ausgelesen werden kann.

    Das Problem ist , das das Script welches den Download einleiten soll erst komplett abgearbeitet wird bevor
    die Weiterleitung an den Client gesendet werden.


    <?php
    
    header("Location: ..."); // Link der zur Datei leiten soll - Ausgabe erst nach beendigung des Script
    
    fopen("http://api....") // Passwort wird geändert.
    
    ?>


    Die Weiterleitung wird ausgeführt aber da am Ende des Scripts das Passwort geändert wird, ist
    das Passwort im Downloadlink falsch und der Server B weist die Anfrage zurück.

    Kann man die Ausgabe nach header() erzwingen und trotzdem das Script auf der Serverseite weiter ausführen lassen oder
    ein weiteres Script aus dem Script heraus aufrufen welches Unabhängig läuft?


    Puh, ist schon echt kompliziert. Schön das ihr mir helfen wollt :)
  8. m******e

    Weitere Möglichkeit:
    Frameset mit 2 Frames oder Datei mit 2 Iframes.

    Frame 1
    <?php
    header("Location: ...");
    ?>

    Frame 2
    <?php
    sleep(xy);
    fopen("http://api....");
    ?>


    Beitrag zuletzt geändert: 6.4.2011 19:34:52 von menschle
  9. Autor dieses Themas

    t-bone

    t-bone hat kostenlosen Webspace.

    Auch schon dran gedacht. Problem dabei ist das man es austricksen kann.
    Man ruft eben nur das Download Script auf , hat das Passwort und führt das Script zum ändern des Passwortes nicht aus -> Account Weg
    Das Passwort ändern muss zusammenhängen mit dem Download Script.

    Was auf jedenfall gehen würde wäre ein Daemon welcher die MySql Tabelle ständig überwacht und wenn Download == 1 dann änder Passwort aber da es dann in einer unendlichen Schleife läuft zieht es natürlich kräftig an den Ressourcen des Servers
  10. m******e

    Was ich iwie nicht verstehe:
    Du hast MySql & einen Server - dessen PW sich ändern läßt - jedoch kein PHP bietet? :confused:
  11. Autor dieses Themas

    t-bone

    t-bone hat kostenlosen Webspace.

    Jaein
    Der Server kann PHP ich kann nur keine Scripte drauf laden und ausführen

    EDIT: Die Lösung.

    Nach ewigen suchen und probieren hat es nun endlich geklappt.
    In Script_A wird per header weitergeleitet und mit
    der Kombination
    pclose(popen("start /B ".$cmd , "r"));
    führe ich dann ein Batch File aus
    welches dafür sorgt das das Script_B ausgeführt wird.

    Script_A wartet nicht darauf das Script_B ausgeführt wurde sondern
    läuft einfach zuende und die Weiterleitung passiert.

    Mit sleep() in Script_B kann solange gewartet werden wie man mag, nach sleep()
    werden die danach aufgeführten Funktionen alle ausgeführt.

    Ich hoffe das wird mal jemanden helfen. Hier ein kurzes Beispiel


    Script_A.php

    <?php
    
    header("Location: some.domain.com"); // Weiterleitung
    
    $cmd = "run_script.bat";
    pclose(popen("start /B  ".$cmd , "r"));
    
    ?>



    Script_B.php
    <?php
    
    sleep(10); // 10 Sekunden warten
    
    // Irgendwas machen
    
    ?>



    run_script.bat
    @echo_off
    c:\xampp\php\php-win.exe  c:\xampp\htdocs\MeinProjekt\Script_B.php
    exit


    Beitrag zuletzt geändert: 8.4.2011 19:46:33 von t-bone
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!