Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Blokada wywołania funkcji jako parametr innej funkcji
Forum PHP.pl > Forum > Przedszkole
krzywy5830
Da się jakoś w PHP zablokować wywołanie danej funkcji jako parametr innej funkcji? Na przykład jeśli mam taki kod:

  1. function janusz()
  2. {
  3. //tutaj jakaś blokada żeby funkcji nie dało się wywoływać jako parametr innej funkcji
  4. //tutaj coś tam ta funkcja robi
  5. }
  6.  
  7. function wojtek($parametr)
  8. {
  9. //tutaj coś tam ta funkcja robi
  10. }
  11.  
  12. wojtek(janusz());


To powinien on zwrócić błąd bo funkcja janusz() ma być niemożliwa do wywołania jako parametr innej funkcji.
nospor
Mozesz pobawic sie tym
http://php.net/manual/en/function.debug-backtrace.php
ale osobiscie nie widze wiekszego sensu. Napisz moze co kombinujesz.
krzywy5830
Cytat(nospor @ 13.07.2016, 15:57:58 ) *
Mozesz pobawic sie tym
http://php.net/manual/en/function.debug-backtrace.php
ale osobiscie nie widze wiekszego sensu. Napisz moze co kombinujesz.


Napisałem sobie klasę a w niej mam metodę admin($id), która daje admina użytkownikowi o podanym ID (wysyła do bazy danych zapytanie "UPDATE `users` SET `admin` = true WHERE `id` = $id"). W tej klasie mam też metodę username($id, $username), która zmienia nazwę użytkownika o podanym ID na $username (wysyła do bazy danych zapytanie "UPDATE `users` SET `username` = $username WHERE `id` = $id"). I teraz jeśli zrobię username(4, admin(4)) to jednocześnie zmieni użytkownikowi nazwę na null i da mu admina. Metodę username() będę wywoływał przy formularzu służącym do zmiany nazwy użytkownika (więc parametr $username jest odczytywany z pola formularza). Obawiałem się, że jakiś pro elo hacker wpisze sobie w pole formularza "admin(i tu swoje ID) i dostanie admina. Jednak z tego co widzę to chyba pola formularza zawsze są czytane jako string, i nie da rady wywołać funkcji formularzem, nie? Chyba jakiegoś chwilowego zaćmienia umysłu dostałem, od kilku dni bez przerwy klepię kod jedynie z przerwami na spanie i jedzenie biggrin.gif
nospor
Tak, zdecydowanie powinienies sie przespac.... wink.gif
Pola forma ida jako string a nie jako funkcje.

Poza tym po cos ludzie wymyslili walidacje wink.gif
viking
A nawet jeśli by to przeszło to naprawdę nie masz tam żadnego systemu uprawnień który by sprawdził czy user = admin i wtedy może to wywołać?
krzywy5830
Cytat(viking @ 13.07.2016, 16:32:43 ) *
A nawet jeśli by to przeszło to naprawdę nie masz tam żadnego systemu uprawnień który by sprawdził czy user = admin i wtedy może to wywołać?


Nie mam. Będę weryfikował przed wywołaniem tej metody czy użytkownik ma odpowiednie uprawnienia. Planowałem mniej więcej coś takiego (to będzie się działo po wysłaniu formularza):

  1. $user = userInfo({id użytkownika pobrane ze zmiennej sesji});
  2.  
  3. if($user['admin'])
  4. {
  5. admin({jakieś ID pobrane z formularza znajdującego się w panelu admina});
  6. }
  7.  
  8. else
  9. {
  10. return -1; //Tutaj jakiś kod błędu
  11. }


userInfo() to metoda pobierająca z bazy danych informacje o danym użytkowniku i zwracająca je w postaci tablicy asocjacyjnej. $user['admin'] może mieć wartość true lub false.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.