Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam
jestem początkujący w php i pisze małą aplikacje w php do zarządzania firewallem ,i mam problem poniewaz niewiem w jakis sposób zabezpieczyć panel przed nie porządanym wywołaniem komend w nim zawartych , całość wygląda tak :
login / hasło user jest w sql
kazdy plik zabezpieczony jest przed wywołaniem jesli sesja jest nieaktywna
i tylko do pełni szczęscia brakuje mi informacji : jak bezpiecznie wywoływać komendy systemu linux w php (polecenie :system znam ) tylko jak wy to robicie ??
pozdrawiam
Offline
generalnie gdy sie "komponuje" takiego stringa do wykonania w innym (lub nawet tym samym) interpreterze, trzeba po prostu bacznie sprawdzac, co siedzi w zmiennych wchodzacych w jego sklad. sprawdz na przyklad (nie znam konkretnych nazw funkcji w php, wiec zapodam pseudokodem), czy nie masz baboli w stylu:
$foo = get_magic_input();
exec("my_magic_comand -o " . $foo . " -b 12");
zmienna $foo powinna byc conajmniej sprawdzona jakims regexem w poszukiwaniu znakow ucieczki.
mysle ze dobrze byloby dac kod do przejrzenia innemu programiscie, oraz zdobyc uslugi jakiegos "mistrza od psucia" ktory zasiadlby przed gotowym interfejsem i probowal go az mu sie znudzi.
ja np. lubie tez nawet w trywialnych programach pisac tz. kontrakty, czyli proste reguly, grupka assert()ow pilnujacych argumentow funkcji, co ma prawo wejsc a co ma prawo wyjsc. najprostszy przyklad. zalozmy, ze masz pole tekstowe, za pomoca ktorego bierzesz od uzytkownika nazwe jakiegos hosta w sieci. mozesz posluzyc sie krotkim wyrazeniem regularnym, by sprawdzic czy sklada sie wylacznie ze znakow alfanumerycznych i ew. kropek:
[A-z0-9]+(\.[A-z0-9]+)*
oczywiscie ten regex musi zostac lekko poprawiony, przede wszystkim uwzgledniajac mozliwosc wystapienia znakow diakrytycznych w nazwach domen (co za idiota je wymyslil...) oraz np. myslnika.
do takiego regexa mozesz tez np. zastosowac cos w rodzaju testu jednostkowego, po prostu skombinuj skads liste przykladowych poprawnych nazw hostow (np wyekstraktowana z historii twojej przegladarki) i sprawdz egrepem czy wszystkie pasuja.
na podobnej zasadzie warto jest badac wszystko co wyciagasz z tablic $_GET czy $_POST, upewnij sie tez ze masz w configu wylaczone register_globals czy jakos tak :P (ale co ja tu chyba nie bede uczyl ojca jak dzieci robic, w zyciu nie napisalem w php niczego ponad 100 linijek...)
hmmmm.... co jeszcze.... jakich znakow nie wolno "wpuscic" do linii komend: na pewno nalezy bacznie filtrowac wszelkie backticki ("`rm -rf /`") oraz dolarki ("$(cp /bin/sh /tmp/.gift; chmod 4777 /tmp/.gift)"). shell to generalnie potezna, ale niewdzieczna bestia :P
mhm... nie wiem na ile to sie przyda, to jedno, a drugie, w razie czego nie ponosze zadnej odpowiedzialnosci, aczkolwiek intencje mam szczere (:
Offline
przypomne iz php ma wbudowana funkcje zabezpieczajaca - escapeshellarg - mysle ze warto sie nia zainteresowac
Offline
Strony: 1