Parameterübergabe funktioniert Webserverübergreifend nicht
Felix2212p
- php
0 EKKi0 dedlfix
Hallo Forum,
wir haben mehrere virtuelle Webserver auf einer Maschine. Nun möchte ich zentral auf einem Server Dateien ablegen, und diese dann mittels include() auf anderen virtuellen Webservern im entsprechenden Layout einbinden. Zu diesem Zweck wird eine Variable mit dem Link übergeben. Auf dem zentralen Server als Test funktioniert diese Variante prima. Nun wollte ich das Ganze live schalten und siehe da: die Variable ist plötzlich leer.
Das ist die zu inkludierende Datei - test.php:
<?PHP
$box = intval($boxID);
echo "Box: ".$box;
//Ergebnis Box: 0)
$xml = new SimpleXMLElement(file_get_contents("http://www.server.php/test.xml",FALSE ));
$xmlPM = $xml->xpath("/pressebox/items/press_release[./box_id={$box}]");
?>
Ausgabedatei ist www.liveserver.de/index_presse.php:
Header....
<?PHP
include("http://www.server.de/test.php");
?>
Footer...
http://www.server.de/test.php?boxID=12345 liefert ein Ergebnis.
http://www.liveserver.de/test.php?boxID=12345 liefert kein Ergebnis.
Was mache ich falsch oder kann man die Parameterübergabe von einem anderen Server im Apache/Webserver verbieten?
Gruß und danke. Peggy
Wir haben PHP 5.2.5 und auf unserer Maschine 3 virtuelle Webserver laufen.
Mahlzeit,
<?PHP
$box = intval($boxID);
echo "Box: ".$box;//Ergebnis Box: 0)
Kein Wunder - wo wird die Variable $boxID mit welchem Wert gefüllt? Ich sehe da nichts ...
MfG,
EKKi
Hier die richtigen Links
http://www.isis-specials.de/crm/index_pressebox_detail.php?box_id=169268
Ergebnis mit echo Variable box_id = 0
Hier das include "allein":
http://www.nomina.de/pressebox_detail.php?box_id=169268
Ergebnis voila.
Was habe ich für einen Denkfehler? Variable ist immer $_GET['box_id'].
Gruß Peggy
echo $begrüßung;
[...] wird eine Variable mit dem Link übergeben.
Das ist keine Variable, das ist nur ein Parameter. Aus diesem Parameter macht das empfangende PHP einen Eintrag in den üblichen Arrays. Erst jetzt ist es eine Variable.
Auf dem zentralen Server als Test funktioniert diese Variante prima. Nun wollte ich das Ganze live schalten und siehe da: die Variable ist plötzlich leer.
Es hat wohl eher der empfangende Server keine Variable angelegt, so wie du das erwartet hast. Ist das error_reporting auf E_ALL gestellt und display_errors eingeschaltet? Du bekommst damit genauere Angaben bei Zugriffen auf nicht vorhandene Dinge.
include("http://www.server.de/test.php");
Damit erzeugst du, sofern allow_url_fopen aktiviert ist, einen HTTP-Request an den Server. Dieser führt ihn aus (inklusive Abarbeiten des PHP-Scripts) und liefert das Ergebnis zurück. Danach ist kein PHP-Code mehr vorhanden, wenn du nicht explizit welchen in die Ausgabe von test.php schreibst. Ohne PHP-Code ist dem include der Sinn verlorengegangen. Es reicht dann ein file_get_contents() oder readfile(), je nach gewünschtem Ergebnis.
http://www.server.de/test.php?boxID=12345 liefert ein Ergebnis.
http://www.liveserver.de/test.php?boxID=12345 liefert kein Ergebnis.
Gehören dir diese beiden Domainnamen? Wenn nicht, nimm doch bitte deine eigenen oder die speziell für Beispiele vorgesehenen Namen.
Was mache ich falsch oder kann man die Parameterübergabe von einem anderen Server im
Apache/Webserver verbieten?
Wie greifst du am Ziel auf die Parameter zu? Hast du nachgesehen, was am Ziel ankommt? phpinfo() oder Kontrollausgaben der üblichen Verdächtigen ($_GET) können hilfreich sein.
echo "$verabschiedung $name";
Server gehören uns. Haben aber keinen root-Zugang.
phpinfo ist http://www.isis-crm.de/info.php
Und hier ist der code des include()
Danke. Peggy
<?PHP
$boxId = intval( $_GET['box_id'] );
$xml = new SimpleXMLElement(file_get_contents("http://www.nomina.de/pressebox/crm.xml ",FALSE ));
$xmlPM = $xml->xpath("/pressebox/items/press_release[./box_id={$boxId}]");
foreach ($xmlPM as $pm) {
$br = "<BR>";
echo "<TR><TD>\n";
echo "<font style="color: #663300; font-weight: bold;">".utf8_decode($pm->headline)."</font>".$br;
echo "<font style="color:#4D4D4D; font-weight: bold;">".utf8_decode($pm->sub_headline)."</font>".$br;
echo "<img src="".$pm->counterpixel."">".$br;
foreach ($pm->fulltext->paragraph as $text){
echo "<P>".utf8_decode($text)."</P>";
}
echo "<HR style="width:550px, size: 1px;>";
$attachments = $pm->attachments;
if ($attachments){
echo "<B>Download (Bilder/PDF):</B><BR>";
foreach($pm->attachments->attachment as $at){
$link = $at->link;
$size = $at->size;
$thumblink = $at->thumblink;
$description = $at->description;
echo "<a style="text-decoration: underline; color: #663300;" href="".$link."" target="_blank">".utf8_decode($description)."</a> (".$size.")".$br;
}
}
echo $br;
echo "</TD></TR>\n";
}
?>
echo $begrüßung;
Server gehören uns. Haben aber keinen root-Zugang.
phpinfo ist http://www.isis-crm.de/info.php
Und hier ist der code des include()
So kommen wir nicht weiter. Du hast anscheinend den Sinn nach der "domain.de"-Frage nicht verstanden. Die phpinfo-Ausgabe wollte ich auch nicht haben. Du kannst aber einen Aufruf dieser Funktion ins Script einbauen und dann sehen, was im Abschnitt "PHP Variables" für Werte aus dem Request vorhanden sind. Das macht sich zwar nicht gut, wenn der Request von PHP aus gestartet wird, weil da die Ausgabe schlecht einsehbar ist, doch du kannst ja den Request mal per Hand in einem Browser starten. Außerdem ist zu sehen, dass verschiedene Einstellungen, die unter PHP6 gar nicht mehr vorhanden sein werden und unter 5 schon standardmäßig ausgeschaltet sind, wieder aktiviert wurden. Du tust dir keinen Gefallen, wenn z.b register_globals, register_long_arrays und magic_quotes_gpc eingeschaltet sind. Schreibe deine Scripte lieber so, dass sie auch ohne diese Features sicher laufen. Den Code deines includes werde und kann ich nicht für dich debuggen. Das musst du schon selbst tun. Nutze für Kontrollausgaben am besten var_dump(), das ist am genauesten. Oftmals ist in Variablen etwas anders enthalten, als man sich so vorgestellt hat. Das muss man mit Hilfe der Kontrollausgaben prüfen.
echo "$verabschiedung $name";
Hallo
phpinfo ist http://www.isis-crm.de/info.php
Nimm die Datei vom Server oder packe sie in ein .htaccess-geschütztes Verzeichnis. So, wie sie jetzt daliegt, kann jeder die nötigen Infos für einen Angriff -inclusive der von dedlfix erwähnten sicherheitsrelevanten Scheunentore- herauslesen.
Tschö, Auge