Czy jeśli udało mi się otworzyć klapę w toi-toiu bez upaprania się podejrzanymi wydzielinami, to jestem już hakerem?
Zakładając, że „haking” to otwieranie rzeczy, których normalni ludzie nie otwierają, to tak, zdecydowanie tak. Ale dlaczego klapa w toi-toiu?
Lata temu w pewnej książce sci-fi natknąłem się na homeryckie porównanie „zamek ten łatwiej było otworzyć niż klapę w sraczu” (cytuję z pamięci, jeśli ktoś zna źródło to proszę o kontakt). Klapa w sraczu zasadniczo zamków nie ma, toteż nie stanowi praktycznie żadnego wyzwania dla wprawionego użytkownika.
Przenieśmy się teraz bardziej na grunt IT, więc normalni ludzie powinni przestać czytać ten wpis dokładnie w tym miejscu.
Każda aplikacja webowa musi mieć zapisaną konfigurację bazy danych. Musi w niej posiadać adres serwera, login i hasło – przynajmniej tyle. Konfiguracji tej należy strzec jak własnego przyrodzenia, bowiem jak ktoś się do bazy dobierze, to… jeśli nie wiesz, co może zrobić, nie zajmuj się webdeweloperką.
Wyobraźmy sobie zatem, że wystawiamy projekt, w którym config ten jest publicznie dostępny… Nawet lepiej: publicznie dostępny i zaindeksowany w google.
Kilkanaście sekund zajęło mi skonstruowanie zapytania, które wyszukiwało pliku databases.yml przechowującego config bazy danych w symfony. I tak, znalazłem aplikacje już działające, i tak, udało mi się dobić do serwera z zewnątrz. Tak, hasła do baz były skomplikowane. Tylko po co, jeśli dostałem je na talerzu?
Robiąc projekt w Symfony, końcowa wersja nie może udostępniać niczego poza katalogiem web/. Nigdy. Zapamiętać to.
Dlaczego wujek google to zindeksował? Zapewne w fazie produkcyjnej dostępny był listing plików i katalogów. Wujek przyszedł, zapisał, poszedł. Od tego są robots.txt. Zapamiętać to.
Ale załóżmy, że wujek nie zindeksował. Co też wymyślę wtedy? Poszukam jakiegoś charakterystycznego dla symfony URLa. Znajdę, i jeśli będzie się zaczynał od web/, to ktoś ostro dał ciała. I zastąpię „web/index.php” przez „config/databases.yml” i będę się cieszył hasłem do bazy.
W ciągu dwudziestu minut googlania zdobyłem i przetestowałem parametry logowania do dziesięciu różnych polskich witryn.
Wnioski? Zabezpieczenia są systemem, muszą działać jak dobrze naoliwiony mechanizm. Jeżeli jeden z fragmentów układanki zawiedzie, możecie hasło admina wypisać jawnym tekstem na stronie głównej. Albo robicie wszystko dobrze, albo wszystko macie spaprane.
Dziękuję państwu, dobranoc. Koniec imprezy. Nie ma takiego kodzenia.
Tagi:
bezpieczeństwo,
google,
php,
symfony