Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Blokada wywołania funkcji jako parametr innej funkcji
krzywy5830
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 5
Dołączył: 14.10.2012

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Mozesz pobawic sie tym
http://php.net/manual/en/function.debug-backtrace.php
ale osobiscie nie widze wiekszego sensu. Napisz moze co kombinujesz.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
krzywy5830
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 5
Dołączył: 14.10.2012

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


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
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post
Post #5





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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ć?


--------------------
Go to the top of the page
+Quote Post
krzywy5830
post
Post #6





Grupa: Zarejestrowani
Postów: 38
Pomógł: 5
Dołączył: 14.10.2012

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 07:05