blokowanie funkcji eval w skryptach

0

mam nadrzędny plik sterujący adm.php i w nim userom zezwalam na tworzenie kodu php i zapisywanie go jako plik na serwerze - tym samym na wywoływanie jego w przeglądarce

czy jeżeli podczas zapisu do pliku podmienię napis eval np

$zapisz = str_replace("eval","fckU",$doZapisu); //funkcja fckU to funkcja wyświetlająca, że użyto niedozwolonej funkcji

to na pewno będę chroniony przed użyciem tej funkcji?

ponoć jakoś można to obejść przez base64 czy coś takiego?

ma ktoś pomysł jak zabronić pisania takiej funkcji i/lub po prostu zna ktoś listę funkcji jakie powinienem zabronić w takim przypadku?

bo jak zamienię nazwy X funkcji to wszystkie nie będą działać :)

nie mogę w samym php wywalić tych funkcji bo ogólnie są mi potrzebne
wiec ani globalne zabronienie ani podmiana na własne funkcje o tej samej nazwie nie wchodzi w grę

0

przecież skoro zezwalasz im na pisanie kodu w php to w zasadzie pozwalasz na wszystko.

0

mój drogi, kompletnie nic nie napisałeś sensownego...

przecież wiem, że pozwalam na wszystko, ale nie wszystko jest przecież problematyczne?

problematyczny jest dostęp do bazy, zarządzanie i 'czytanie' innych plików i takie tam

a to nie są przecież wszystkie ważne funkcje PHP

0

http://stackoverflow.com/ques[...]lers-deal-with-malicious-code ogólnie to oddzielne VM będzie najlepsze ze względu na bezpieczeństwo. Samo eval nie jest jedynym zagrożeniem, najlepiej by podejść do tego zewnętrznie.

1
jam napisał(a)

mój drogi, kompletnie nic nie napisałeś sensownego...

przecież wiem, że pozwalam na wszystko, ale nie wszystko jest przecież problematyczne?

problematyczny jest dostęp do bazy, zarządzanie i 'czytanie' innych plików i takie tam

a to nie są przecież wszystkie ważne funkcje PHP

Napisał bardzo sensownie, tylko bardzo skrótowo. Postaram się przedstawić pełniej co, jak sądzę, miał na myśli.
Wymieniłeś kilka rzeczy problematycznych - krótko mówiąc, korzystając z str_replace będziesz podmieniał oprócz funkcji konstrukcji eval:

  • wszystkie odwołania do baz danych (nie chodzi o same funkcje mysql czy mysqli, ale również klasę PDO i inne umożliwiające dostęp do bazy itp) - no, bazy z głowy
  • fopen, open, file_get_Contents i całą resztę funkcji czytających pliki
  • file_put_contents, fprintf i całą resztę funkcji piszących do plików
  • wszelkie exec, system itp.
  • funkcje od sesji
  • zablokować dostęp do tablicy $_COOKIE (w przeciwnym wypadku grozi to "wykradnięciem sesji" innych użytkowników którzy na stronę danego użytkownika wejdą)
    W sumie zostawić użytkownikom możesz tylko funkcje wypluwające tekst na wyjście... operacje na tablicach... no i to wszystko chyba :P Nie wiem co dokładnie Twoi użytkownicy mogliby robić tam i po co im możliwość wywołania PHPa, ale to bardzo ograniczony zakres operacji :)

I to właśnie kolega miał na myśli, że oprócz eval, musisz zablokować większość funkcji języka, bo umożliwiając użytkownikom wykonanie kodu PHP, umożliwiasz im wszystko.
A i tak pewnie znajdą się luki, które komuś uda się wykorzystać :) I rozwiązanie zaproponowane przez Zjarka jest sensowniejsze niż usuwanie wywołań funkcji/konstrukcji z kodu.

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