G... uzik prawda. Pod koniec marca, w piątek po szkole wrzuciłem na serwer prosty skrypt wyświetlający listę plików i katalogów, gdyż chciałem coś sprawdzić. Przez przypadek do ścieżki wpisałem o jedno za dużo "../". To, co wtedy ujrzałem, wywołało we mnie tylko jedną reakcję: LOL. Skrypt pokazał mi zawartość katalogu, w którym znajdowały się wszystkie konta. W teorii nawet nie powinienem wiedzieć, że jest coś takiego. Widziałem dosłownie wszystko: konta uczniów, konta nauczycieli, pliki itd. Szybko zmodyfikowałem skrypt tak, by pokazywał o każdym pliku wszystkie możliwe dane, z uprawnieniami, właścicielem i grupą włącznie. Ścieżkę wpisywało się przez URL. Dodatkowo napisałem sobie skrypt do wczytywania zawartości plików i wyświetlania ich w przeglądarce. To, czego dokonałem, przeszło moje najśmielsze oczekiwania. Wszystkie konta stały przede mną otworem. Obejrzałem sobie bardziej szczegółowo jedno z nich, należące do mojego kolegi i ruszyłem na eksplorację dysku szkoły. Bardzo ciekawa była lektura konfiguracji systemu :). Nie zapomniałem także o zostawieniu śladu mojej bytności na stronie WWW szkoły. O wszystkim opowiedziałem na pierwszych zajęciach informatycznych nauczycielowi, gdyż po części zagrożone było też moje konto. Jako, że i tak musiałem tam zainstalować nowe PHP w wersji 5.0.4, postanowiłem wtedy przy okazji załatać dziurę...
Wszystkiemu winny był wyłączony Safe mode. PHP'ka przez to generalnie waliło, kto jest właścicielem jakiego pliku, kto ma jakie prawa. Było polecenie: otwieraj, to otwierał. Po udanej kompilacji poprawiłem wpisy w php.ini. Uaktywniłem tenże tryb, określiłem, do jakich katalogów mają dostęp skrypty, zablokowałem polecenie system(). Po restarcie odpaliłem mój skrypt chakujący :) z odpowiednią ścieżką. Wunderbar. Zamiast listy plików ujrzałem to, co ujrzeć powinienem: "PHP Safe mode restriction in effect: permission denied".
Wniosek nasuwa się sam. Choćbyś nie wiem, jak dobrze zabezpieczył swój system operacyjny, takie głupie zapomnienie o prostej dyrektywie w PHP to jak wywieszenie wielkiego napisu: "Hej złodzieju, jestem do obrobienia". Tyczy się to przede wszystkim komputerów, na których zamierzamy udostępniać usługi WWW pewnej grupie użytkowników.
Tryb bezpieczny powinien też zainteresować twórców skryptów PHP. Zmiana zachowania funkcji operujących na plikach to jedno. Wyłącza on również pewną grupę funkcji, w ogóle nie zezwalając na ich użycie. Dlatego warto dla własnego dobra włączyć go i przetestować nasz skrypt, szczególnie, gdy wykonujemy nim jakieś dziwne operacje na katalogach, ładowanie dodatkowych bibliotek itd. Zarówno my, jak i jego użytkownicy unikną wtedy przykrych niespodzianek...







Napisał slipkid w poniedziałek, 11 kwietnia 2005 o 22:05
Zyx, trzeba bylo skopiowac katalog The Rising Star of Polish IT xD byloby co poprzegladac ;] p.s. nocna wersja stronki jest spoko ;p