Funkcja eval(); tworzenie obiektów [PHP]

Odpowiedz Nowy wątek
2006-12-02 13:45
0

Chciałbym się zapytać dlaczego taki kod nie działa...

include_once("ext/".$_GET['id'].".php");
$wykonaj = "$config = new ".$_GET['id']."();";
eval($wykonaj);
$config->config();

dla przykładu jeżeli zmienna $_GET['id'] przyjmie wartość users i dałbym taki kod:

include_once("ext/".$_GET['id'].".php");
$config = new users();
$config->config();

to działa poprawnie...

Prosiłbym o pomoc...
Z góry dziękuje :)

Pozostało 580 znaków

2006-12-02 13:49
0

nie możesz dać tego new costam w tym pliku costam.php ? w ogóle to takie coś to jakoś tak mało bezpieczne mi się wydaje
chodzi o to że zmienną $wykonaj dałeś w podwójne cudzysłowy, to oznacza że parser przetworzy $config i z twojego:

$wykonaj = "$config = new ".$_GET['id']."()';";

zamiast:

$wykonaj = '$config = new users();';

(jeśli $config jest akurat puste)

wychodzi:

$wykonaj = ' = new users();';

(jeśli $config jest puste)
rozwiązanie to oczywiście zamiana wszystkich cudzysłowów "podwójnych" na cudzysłowy "pojedyncze" (apostrofy)

poza tym skoro już dałeś podwójne cudzysłowy to mogłeś to wykorzystać i nie wychodzić z nich w celu wpisania zmiennej $_GET[id]


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-12-02 14:02
0

Kurde faktycznie głupi błąd :P :) wielkie dzięki :) </quote>

Pozostało 580 znaków

2006-12-02 14:11
nav
0

Po co do tego eval?

$klasa = $_GET['id'];
$config = new $klasa();

utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0