[PHP] include per HTTP ... woher?

Orbit9

www.Orbit9.de
ID: 20533
L
25 April 2006
164
2
moin,

suchfunktion hat leider nix zu tage gefördert.

ich möchte inhalte für externe seiten mittels php include anbieten. es wäre für mich interessant nachzuvollziehen, woher die abfragen kommen (also von welchen seiten).

geht das mittels $_SERVER oder ähnlicher mittel? habe etwas rumprobiert aber nix brauchbares gefunden.
 
Normalerweise ist die IP in $_SERVER['REMOTE_ADDR'].
Ob das bei einem Include auch der Fall is, weiß ich ned, musst probieren.

Wäre es aber nicht besser, ein XML-Interface anzubieten, wo der Datenempfänger einfach nur ein PHP-Script aufruft. Is für ihn besser und für dich besser.
 
das nutzt mir leider nichts, da sich die ausgebenen werte alle auf das includede skript, aber nicht auf das includedende beziehen. ja, schwer auszudrücken.

also:

xzy.de/info.php?id=37 ruft per include das skript https://extern.orbit9.de/irgendwas.php?id=37 auf.

bisher konnte ich nur variablen mit bezug auf extern.orbit9.de... finden, aber keine die mir sagt welche xzy.domain das aufruft.

werden da nicht (html?) header gesendet, ähnlich wie wenn eine html-seite eine externe bild-datei einbindet?

XML erscheint mir hier etwas schwieriger für den enduser. zumal die datenaufbereitung nach bestimmten regeln erfolgen soll und wenn diese sich ändern müßte überall ein aktuelles skript installiert werden, was einfach nicht gewährleistet ist.
 
Ach da steht nen include("https://..."); dann versteh ich was du meinst. Das ist ja generell erstmal kreuzgefährlich... Wenn in $_SERVER nichts drin steht, wirst du wahrscheinlich auch sonst nirgens was finden. Allerdings solltest du zumindest über $_SERVER['REMOTE_ADDR'] die IP des Servers kriegen, der dich includet, denn irgendwie muss ja auch PHP intern nen HTTP Request zu deinem Server fahren. Über den User der das Script auf dem andern Server (der, der deine Datei includet) aufruft, wirst du hingegen nichts erfahren.
 
happymaster schrieb:
Hm.. dir fehlt wohl die Vorstellung für den Unterschied von include zu file, readfile, fopen, fsockopen, etc.!

Stichwort: Variablen, etc.! ;)

eine vorstellung habe ich schon, aber ich lerne auch gerne mehr.

wenn ein skript von server A per include auf ein skript bei mir auf server B zurückgreift, dann bekommt es ja nur die htmlausgabe meines skriptes zu "sehen".

variablen kann server a auch nur als parameter übergeben.

wo ist also der unterschied zu einem normalen http aufruf per browser-url?

und wo liegt die ausnutzbarkeit, wenn die einzige mögliche variable überprüft wird auf valide zeichen?

meine fragen sind nicht provokativ gemeint, sondern echtes interesse. :)
 
Orbit9 schrieb:
wenn ein skript von server A per include auf ein skript bei mir auf server B zurückgreift, dann bekommt es ja nur die htmlausgabe meines skriptes zu "sehen".
vereinfacht:
Du benutzt folgenden Code, um deine DB zu connecten:
PHP:
$dbname="usr_web12_345";
//...
mysql_connect($dbhost,$dbuser,$dbpw);
mysql_select_db($dbname);
Weiter unten inkludierst du das Script von Server B.
PHP:
include("https://www.example.com/serverb/script.php");
Soweit alles klar...


...wenn das Script von Server B jetzt ein
PHP:
mysql_query("DROP DATABASE $dbname");
zurückliefert und du das includest, brauchst du hoffentlich keine Info mehr, um dir vorzustellen, was passiert ;)
 
Das wird nicht funtkionieren wenn du kein SSI Zugriff hast bekommst du nur das Interpretierte Ergebnis zurück!
 
theHacker schrieb:
...wenn das Script von Server B jetzt ein
PHP:
mysql_query("DROP DATABASE $dbname");
zurückliefert und du das includest, brauchst du hoffentlich keine Info mehr, um dir vorzustellen, was passiert ;)

wie wird das bewerkstelligt?

gibt dann das skript auf server b ein
PHP:
 echo '<?php ';

echo 'mysql_query...'; 

echo '?>';
aus.


kann mir irgendwie nicht vorstellen, wie das funktionieren soll.

aber in meinem fall geht es ja auch darum, dass ich das skript zum includen anbiete und nicht dass ich ein fremdes skript includiere.

ich probier mal etwas rum, versuch macht klug.
 
theHacker schrieb:
vereinfacht:
Du benutzt folgenden Code, um deine DB zu connecten:
PHP:
$dbname="usr_web12_345";
//...
mysql_connect($dbhost,$dbuser,$dbpw);
mysql_select_db($dbname);
Weiter unten inkludierst du das Script von Server B.
PHP:
include("https://www.example.com/serverb/script.php");
Soweit alles klar...


...wenn das Script von Server B jetzt ein
PHP:
mysql_query("DROP DATABASE $dbname");
zurückliefert und du das includest, brauchst du hoffentlich keine Info mehr, um dir vorzustellen, was passiert ;)

Nene mysql_query("DROP DATABASE $dbname"); Wird nicht als HTML code sondern als PHP code zurückgegeben und demnach auch ausgeführt/!\
 
ja, aber er wird ja ausgeführt auf dem server wo das skript liegt und nicht auf dem server, von dem her included wird.

also server A

skript:
DB öffnen
irgendwas
include (skript von server b)

-> skript wird auf server b ausgeführt
-> ergebnis (HTML) wird an server a übermittelt
-> fließt als html in skript von server a ein

wo ist das problem?
 
Orbit9 schrieb:
ja, aber er wird ja ausgeführt auf dem server wo das skript liegt und nicht auf dem server, von dem her included wird.
wo ist das problem?
Das das falsch ist. Es wird auf dem Server ausgeführt auf dem es inkludiert wird. Da bin ich mir jetzt eigentlich ziemlich sicher.
 
also das kann ich mir kaum vorstellen, denn php zeichnet sich ja gerade dadurch aus, dass es auf dem server ausgeführt wird und nur die ergebnisse per http übergeben werden.

was ihr beschreibt gilt, wenn das include auf dem selben server stattfindet.

include ich jedoch per http, dann ist das ja eine ganz normale http anfrage und das ergebnis des php-skriptes wird zurückgegeben.

ich habe das gerade getestet, ein skript auf server A öffnet die db und inlcuded ein skript von server B. dort erfolgt eine abfrage in der DB. man bekommt jedoch nur die fehlermeldung ausgegeben (no DB connection).

könnt mich aber gerne noch von gegenteil überzeugen.

ich teste gerade nochmal wie das ist, wenn die includierte datei nicht auf *.php endet.
 
ah, ok. also wenn ich beispielsweise eine *.txt includiere, die aber php-code enthält, dann wird der ausgeführt.

somit habt ihr recht, die schwachstelle ist ja auch gegeben, wenn ich die kommandos direkt in die ausgabe leite (wie oben angegeben mit echo '<?php', etc.) bzw. wenn ich apache so konfigurieren würde, dass er php nicht interpretiert, sondern nur ausgiebt.