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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2008-06-10 20:48:23

  szewczyk - Stary wyjadacz :P

szewczyk
Stary wyjadacz :P
Zarejestrowany: 2006-12-03

bezpieczeństwo komend systemowych w php

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

 

#2  2008-06-10 21:29:13

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: bezpieczeństwo komend systemowych w php

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 (:


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#3  2008-06-11 16:33:39

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: bezpieczeństwo komend systemowych w php

przypomne iz php ma wbudowana funkcje zabezpieczajaca - escapeshellarg - mysle ze warto sie nia zainteresowac


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)