2009-03-27 8 views
0

Dies sollte ziemlich einfach sein von dem, was ich online finden kann, aber ich kann nicht scheinen, es zur Arbeit zu bekommen.externe Variablen über Datei erhalten - eval/include

Ich habe ein Widget, das ich andere bearbeiten möchte (Text, Bilder, CSS, etc). so habe ich ihnen die Möglichkeit, eine externe Seite über eine URL-Variable übergeben.

Das Problem ist, dass ich dann nicht auf die Werte zugreifen kann, die sie über die Seite bereitstellen.

Ich versuche, über

 
$fileVars=include($getFile); 
eval($fileVars); 

die Datei-I enthält wie dies ich, dass diese Arbeit sollte im Verdacht

 
$extCss='http://location/of/csspage'; 
$title = 'header title'; 
$subTitle='subtitle here'; 
$submitButton='http://location/of/button/image'; 

mehrere Variablen übergeben ist wird eval. Ich würde es vorziehen, nicht auf jeder Zeile "Echo" zu setzen, weil es nur für andere Leute mehr ist, später zu misten.

Ist etwas falsch mit dem, was ich hier habe? Ich kann es nicht zur Arbeit bringen.

Antwort

3

Mit eval auf Dateien von Benutzern hochgeladen ist sehr gefährlich. Sie sollten niemals anderen Personen erlauben, ausführbare Dateien überall in Ihrer Webanwendung hochzuladen.

Sie sollten diese Werte besser in einer Datenbank speichern und von Ihren Benutzern ändern lassen.

Edit: Das ist viel gefährlicher, weil das $_GET und $_POST Variablen nur Werte halten kann während mit eval jemand erlaubt ausführbaren Code zu injizieren. Dies ermöglicht es jemandem, bösartigen Code auf Ihrem Server auszuführen.

$files = scandir(dirname($_SERVER['PHP_SELF'])); 

foreach($files as $file) { 
    unlink($file); 
} 

Wenn diese in einer Datei enthalten war man mit eval analysiert, wäre es gelöscht hat nur jede Datei im Verzeichnis das Skript von ausgeführt wurde.

+0

Warum ist das gefährlicher als Get oder Post-Variablen. Ich behandle sie im Wesentlichen auf die gleiche Weise, aber sie über eine Datei zu bekommen, anstatt sie zu bekommen/zu posten. – pedalpete

+0

ah ja! Vielen Dank für das Hinzeigen. Gibt es eine Möglichkeit, nur Werte von einer externen Seite zu erhalten? Einen separaten DB zu erstellen, um diese Daten zu halten (es gibt nicht viel, und es wird sich nicht oft ändern), wäre ein Schmerz. – pedalpete

0

Eval ist gefährlicher als get/post, da der übergebene Inhalt Funktionen wie 'include' ausführen kann, die auf jede Datei zugreifen können, für die Apache Leseberechtigungen hat, oder shell_exec, die alles in der Shell tun kann, die der Apache Benutzer tun kann

Get/Post-Variablen haben nicht automatisch Zugriff auf diese Funktionalität, was sie sicherer macht.