Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Jak użyć "create_function" zamiast "eval"
Weles
post
Post #1





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

Ostrzeżenie: (0%)
-----


Witam!

Czytałem dzisiaj trochę w internecie, że Eval jest niby wolniejszy 20 krotnie niż "create_function", no i wbijam sobie w manuala:
http://php.net/manual/en/function.create-function.php
Ale nadal nie wiem jak zmienić:

  1. eval(stripslashes('?>'.($page['tresc_pl']).'<?'));


Aby było "create_function".
Chyba że źle wyczytałem i nie mogę użyć tej funkcji zamiast Evala?

A jeżeli nie, to jaki kod zamiast mojego musiałbym użyć aby to 'działało' ?

Pozdrawiam!

Ten post edytował Weles 27.08.2012, 17:52:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Po co Ci tu eval/create_function? Wystarczy po prostu:
  1. echo stripslashes($page['tresc_pl']);
Go to the top of the page
+Quote Post
untorched
post
Post #3





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


Wydaję mi się, że zawartość zmiennej $page['tresc_pl'] posiada w sobie jakieś skrypty i dlatego używa on funkcji eval()
Go to the top of the page
+Quote Post
pamil
post
Post #4





Grupa: Zarejestrowani
Postów: 97
Pomógł: 15
Dołączył: 12.08.2012
Skąd: Zabrze

Ostrzeżenie: (10%)
X----


You do it wrong!

ob_start()
include
ob_get_clean()
Go to the top of the page
+Quote Post
peter13135
post
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Chyba powinnno być :
  1. <? echo 'hello world' ?>

a nie tak:
  1. ?> echo 'hello world' <?


No.. ale mogę się mylić, bo jeszcze nie doszedłem w swoim kursie php jak się rozpoczyna i kończy skrypt php (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
untorched
post
Post #6





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


Cytat(peter13135 @ 27.08.2012, 23:06:09 ) *
No.. ale mogę się mylić, bo jeszcze nie doszedłem w swoim kursie php jak się rozpoczyna i kończy skrypt php (IMG:style_emoticons/default/tongue.gif)


Widocznie w twoim kursie zapomnieli wspomnieć jak działa funkcja eval(), więc poczytaj o niej w manualu i może domyślisz się dlaczego jest tak a nie inaczej (IMG:style_emoticons/default/smile.gif) Jeśli do eval() potrzebujesz wprowadzić zwykły kod HTML musisz zakończyć skrypt znakami ?>. Przykład:
  1. eval('echo "tekst";');
jest niczym innym jak:
  1. <?php echo "tekst"; ?>
więc jeśli chcesz wprowadzić HTML
  1. eval('?>Jakiś tekst <?php');
co da nam efekt
  1. <?php ?>Jakiś tekst <?php ?>
. Ale i tak polecam manual, bo nie sądzę, że zrozumiesz o co mi chodzi (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Weles
post
Post #7





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

Ostrzeżenie: (0%)
-----


W zmiennej w evalu mam skrypty w PHP pobierane z Bazy Danych.
Więc jak to po co mi funkcja Eval? ^.^

Czy jest po prostu jakiś szybszy/lepszy zamiennik tej funkcji?

Pozdrawiam!
Go to the top of the page
+Quote Post
pamil
post
Post #8





Grupa: Zarejestrowani
Postów: 97
Pomógł: 15
Dołączył: 12.08.2012
Skąd: Zabrze

Ostrzeżenie: (10%)
X----


Cytat(Weles @ 28.08.2012, 02:14:33 ) *
W zmiennej w evalu mam skrypty w PHP pobierane z Bazy Danych.
Więc jak to po co mi funkcja Eval? ^.^

Czy jest po prostu jakiś szybszy/lepszy zamiennik tej funkcji?

Pozdrawiam!


Cytat(pamil @ 27.08.2012, 22:48:08 ) *


Lub system szablonów.
Go to the top of the page
+Quote Post
Weles
post
Post #9





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

Ostrzeżenie: (0%)
-----


Cytat(pamil @ 28.08.2012, 15:49:24 ) *
Lub system szablonów.


Nie rozumiem jak mogę zaincludować zmienną? ;f
Go to the top of the page
+Quote Post
Helid
post
Post #10





Grupa: Zarejestrowani
Postów: 280
Pomógł: 20
Dołączył: 12.12.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


  1. $kod_php = 'echo "test";';
  2. $newfunc = create_function('$a', $kod_php);
  3. echo $newfunc;
Go to the top of the page
+Quote Post
darko
post
Post #11





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(Weles @ 28.08.2012, 02:14:33 ) *
W zmiennej w evalu mam skrypty w PHP pobierane z Bazy Danych.
Więc jak to po co mi funkcja Eval? ^.^

Czy jest po prostu jakiś szybszy/lepszy zamiennik tej funkcji?

Pozdrawiam!

Proponuję zmienić podejście i całkowicie przeprojektować aplikację. Trzymanie skryptów w bazie i wykonywanie ich za pomocą eval to potencjalne zaproszenie do skorzystania z otwartej furtki dla atakującego i proszenie się o problemy.
Go to the top of the page
+Quote Post
Weles
post
Post #12





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

Ostrzeżenie: (0%)
-----


Cytat(darko @ 28.08.2012, 19:11:28 ) *
Proponuję zmienić podejście i całkowicie przeprojektować aplikację. Trzymanie skryptów w bazie i wykonywanie ich za pomocą eval to potencjalne zaproszenie do skorzystania z otwartej furtki dla atakującego i proszenie się o problemy.


Korzystam z evala 2 lata i od tego czasu jakoś żadnych problemów nie miałem, więc pierdoły że Eval to zło, to czyste bzdury jak dla mnie :f
Po prostu trochę jest wolne i to mnie wkurza.
A trzymać kod PHP w bazie bardzo lubię, ponieważ sobie napisałem odpowiedni edytorek i mogę w każdej chwili edytować i dodawać nowe podstrony bez edycji czego kolwiek, a gdyby nie kod w bazie, to bym musiał się bawić w fopen i tego typu rzeczy, a tak jest dużo.. hmm.. ciekawiej (IMG:style_emoticons/default/tongue.gif)
A skoro jakaś funkcja istnieje (czyli do czytania skryptów PHP z bazy) to jest ona do użytku, co innego gdyby takiej funkcji nie było (IMG:style_emoticons/default/tongue.gif)
Pozdrawiam.

@2UP:
EDIT:
Próbowałem chyba na kilkanaście sposobów i cały czas jak nie błąd zewnętrzny serwera, to brak całkowicie tekstu.

Ten post edytował Weles 28.08.2012, 18:57:02
Go to the top of the page
+Quote Post
darko
post
Post #13





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(Weles @ 28.08.2012, 19:50:31 ) *
Korzystam z evala 2 lata i od tego czasu jakoś żadnych problemów nie miałem, więc pierdoły że Eval to zło, to czyste bzdury jak dla mnie :f
Po prostu trochę jest wolne i to mnie wkurza.
A trzymać kod PHP w bazie bardzo lubię, ponieważ sobie napisałem odpowiedni edytorek i mogę w każdej chwili edytować i dodawać nowe podstrony bez edycji czego kolwiek, a gdyby nie kod w bazie, to bym musiał się bawić w fopen i tego typu rzeczy, a tak jest dużo.. hmm.. ciekawiej (IMG:style_emoticons/default/tongue.gif)
A skoro jakaś funkcja istnieje (czyli do czytania skryptów PHP z bazy) to jest ona do użytku, co innego gdyby takiej funkcji nie było (IMG:style_emoticons/default/tongue.gif)
Pozdrawiam.

@2UP:
EDIT:
Próbowałem chyba na kilkanaście sposobów i cały czas jak nie błąd zewnętrzny serwera, to brak całkowicie tekstu.

Proponuję poświęcić kilka minut, wklepać w wujka google "php eval vulnerability" i nie zarzucać mi wypisywania bzdur na forum. To, co opisałeś to jest według mnie sztuka dla sztuki, bo nie jest to nic, czego normalnym (każdym) edytorem tekstowym nie można byłoby zrobić (mam na myśli edycję kodu php), a tylko powodujesz same straty:
1) zupełnie zbędny dodatkowy narzut żądań które lecą do bazy
2) spadek wydajności (sam przyznałeś, że eval jest powolny), poza tym po co wyciągać kod php z bazy, jeśli od tego są skrypty php? może w takim razie w ogóle zrezygnujesz ze skryptów php, przecież wszystko można wyciągnąć z bazy i jednym evalem wykonać jeden wielki kod?
3) narażenie aplikacji na potencjalne niebezpieczeństwo (tzw. eval injection, patrz użycie eval)
4) o złych praktykach programistycznych nie wspominając (tak, użycie eval właśnie jest taką złą praktyką)
Go to the top of the page
+Quote Post
pamil
post
Post #14





Grupa: Zarejestrowani
Postów: 97
Pomógł: 15
Dołączył: 12.08.2012
Skąd: Zabrze

Ostrzeżenie: (10%)
X----


Dodając do tego, że to wszystko można uzyskać dużo lepiej, buforując dane, funkcje podałem w moim pierwszym poście w tym temacie.
Każde wystąpienie eval() da się zastąpić porządniejszym kodem.

Cytat(Weles @ 28.08.2012, 19:50:31 ) *
A trzymać kod PHP w bazie bardzo lubię, ponieważ sobie napisałem odpowiedni edytorek i mogę w każdej chwili edytować i dodawać nowe podstrony bez edycji czego kolwiek, a gdyby nie kod w bazie, to bym musiał się bawić w fopen i tego typu rzeczy, a tak jest dużo.. hmm.. ciekawiej (IMG:style_emoticons/default/tongue.gif)

A skoro jakaś funkcja istnieje (czyli do czytania skryptów PHP z bazy) to jest ona do użytku, co innego gdyby takiej funkcji nie było (IMG:style_emoticons/default/tongue.gif)

Ad. 1. Ta, a obrona przed hakerami, którzy uzyskali dostęp do systemu jest taka fascynująca, ciekawa. Ach ta adrenalina!
Ad. 2. Było też register_globals, magic quotes, safe mode, mysql_* i wiele innych. To czemu Ci źli ludzie je deprecjonują?

Ten post edytował pamil 28.08.2012, 19:59:48
Go to the top of the page
+Quote Post
abort
post
Post #15





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Cytat(Weles @ 28.08.2012, 19:50:31 ) *
A trzymać kod PHP w bazie bardzo lubię, ponieważ sobie napisałem odpowiedni edytorek i mogę w każdej chwili edytować i dodawać nowe podstrony bez edycji czego kolwiek, a gdyby nie kod w bazie, to bym musiał się bawić w fopen i tego typu rzeczy, a tak jest dużo.. hmm.. ciekawiej (IMG:style_emoticons/default/tongue.gif)

No i nie zapominajmy o gigantycznej wartości edukacyjno-poznawczej takiego kodu: mamy tu klasyczny przykład rekurencji: kod PHP służy do oczytywania z bazy danych kodu PHP, za pomocą którego to kodu będziemy odwoływali sie do bazy i zapisywali dane - oczywiście jednocześnie z kodem PHP, którym to kodem będziemy te dane obrabiać...
No, muszę powiedzieć, że można byłoby nawet potraktować to jako dość oryginalne podejście do filozofii obiektowej, dziedziczenia, polimorfizmu i takich tam. No i cały PHP Core team w zasadzie już jest bezrobotny - polimorfizm klas PHP w bazie danych SQL (IMG:style_emoticons/default/smile.gif)

Czy naprawdę nie przyszło Ci na myśl, że odczytywanie czegokolwiek z bazy i potraktowanie tego eval()-em to niepotrzebne katowanie bazy danych i interpretera PHP?
Swoją drogą, zupełnie z ciekawości: jak masz zorganizowaną tę bazę tego Twojego kodu PHP, w sensie takim: ile kodu (najmniej) może zwrócić jedno zapytanie do bazy? Znak? Linię? Funkcję? Moduł?
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Korzystam z evala 2 lata i od tego czasu jakoś żadnych problemów nie miałem, więc pierdoły że Eval to zło, to czyste bzdury jak dla mnie :f
Po prostu trochę jest wolne i to mnie wkurza.

Bo akcelerator nie ma możliwości zoptymalizowania tego kodu.

Cytat
A skoro jakaś funkcja istnieje (czyli do czytania skryptów PHP z bazy) to jest ona do użytku, co innego gdyby takiej funkcji nie było

Wiesz, wprowadzono niedawno goto w PHP, a jakoś nikt normalny z tego nie korzysta.
Go to the top of the page
+Quote Post
peter13135
post
Post #17





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat
. Ale i tak polecam manual, bo nie sądzę, że zrozumiesz o co mi chodzi

hehe, faktycznie brzmi jak wykład z fizyki kwantowej.

Tak prawdę mówiąc, nie miałem okazji używać funkcji eval(), więc jak to z tymi tagami jest o tym nie widziałem. Teraz zerknąłem do manuala i już wiem. Na podstwie tego stwierdzam, że moje przypuszczenia miały sens. Bo skoro (tak jak napisałeś)
  1. eval('echo "tekst";');

wyświetla to samo co :
  1. <?php echo "tekst"; ?>


to wnioskuję, że taki kod :
  1. eval('?>echo "tekst";<?');

wyświetla to samo co :
  1. <?php ?> echo "tekst"; <??>

Co jest nieprawidłowe, bo to wyświetli zawartość skryptu (czyli echo "tekst" zamiast text). Przypuszczam, że autor chcę wykonać skrypt, a nie go wyświetlić (inaczej nie używał by evala)

Ten post edytował peter13135 29.08.2012, 18:02:26
Go to the top of the page
+Quote Post
untorched
post
Post #18





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


Cytat(peter13135 @ 29.08.2012, 18:54:43 ) *
hehe, faktycznie brzmi jak wykład z fizyki kwantowej.

Tak prawdę mówiąc, nie miałem okazji używać funkcji eval(), więc jak to z tymi tagami jest o tym nie widziałem. Teraz zerknąłem do manuala i już wiem. Na podstwie tego stwierdzam, że moje przypuszczenia miały sens. Bo skoro (tak jak napisałeś)
  1. eval('echo "tekst";');

wyświetla to samo co :
  1. <?php echo "tekst"; ?>


to wnioskuję, że taki kod :
  1. eval('?>echo "tekst";<?');

wyświetla to samo co :
  1. <?php ?> echo "tekst"; <??>

Co jest nieprawidłowe, bo to wyświetli zawartość skryptu (czyli echo "tekst" zamiast text). Przypuszczam, że autor chcę wykonać skrypt, a nie go wyświetlić (inaczej nie używał by evala)


Cóż, faktycznie poraża mnie twoja inteligencja, żeby nie zrozumieć "wykładu z fizyki kwantowej". Ciężko się domyśleć, że skoro użył:
  1. eval('?>'.($page['tresc_pl']).'<?');
to zmienna zawiera jakiś kod HTML oraz skrypty. Może nie jest to dobry sposób, ale jeśli chce to niech używa. Obstawiam że zmienna $page['tresc_pl'] zwraca np:
  1. Mamy godzinę: <?php echo date('H:i:s'); ?>, dnia <?php echo date('d-m-Y'); ?>
Wykaż trochę wyobraźni zanim zaczniesz prawić morały.
Go to the top of the page
+Quote Post
peter13135
post
Post #19





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Akurat w tym temacie na każdym kroku kreuję się na osobę, która dopiero co czepiła się kursu PHP i nie ma ten ten temat większego pojęcia. Na podstawie czego wywnioskowałeś, że prawię morały ?

Jeśli przedszkolak w przedszkolu pyta się przedszkolanki "czemu ten kotek ma futerko w centki, czyżby zmieniał się w tygrysa ?" to znaczy, że prawi morały, czy może po prostu czegoś nie wie i chcę się dowiedzieć ?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:45