Bezpieczne programowanie w PHP
W ramach zajęć z przedmiotu „Bezpieczeństwo w Systemach Komputerowych” tworzymy pewne materiały, oczywiście dotyczące bezpieczeństwa. Postanowiliśmy podzielić się tym z szerszym gronem niż tylko z kolegami z roku.
Zaczniemy od kilku tricków dotyczących PHP. Pokażemy jak wykonać pewne ataki i, co ważniejsze, jak się przed tymi atakami bronić. Będzie też kilka zasad historycznych, żeby pokazać, że język ewoluuje i sam zapewnia coraz większą ochronę.
Na początek zasada numer jeden – jedna, niepowtarzalna. Banalnie prosta, ale ekstremalnie ważna: użytkownik jest zły. Jeśli tylko będzie miał możliwość coś popsuć, to na pewno popsuje. Jeśli chcesz, żeby w dane pole wpisał liczbę, na pewno wpisze znaki specjalne.
Tak, to już jest atak. Jeśli nie zadbaliśmy o filtrowanie danych, to nasz portal jest potencjalnym celem ataków, gdyż większość ataków korzysta właśnie z tej luki.
Sprawa numer dwa: rozszerzenia plików. Jeśli tworzysz plik z kodem PHP, zawsze zapisuj go z rozszerzeniem „.php”. Jeśli zapiszesz go z innym rozszerzeniem (popularne jest „.inc”), to użytkownik wyświetli go jak zwykły plik tekstowy. Odczyta Twoje hasła. Skompromituje serwer. I po zabawie.
Sprawa numer trzy: dyrektywa register_globals. Jeśli masz możliwość – wyłącz. I to czym prędzej. Ona po prostu jest niebezpieczna! wystarczy wprawny cracker i wszelkie algorytmy bezpieczeństwa zostają skompromitowane.
Numer cztery: ataki typu Injection. Wstrzyknięcie obcego kodu w nasz kod. Sprawa bardzo niebezpieczna. Zabezpieczenie – filtrowanie danych. Do ataków tego typu należą SQL Inecjtion, Code Injection oraz Shell Injection.
Numer pięć: XSS i CSRF – umieszczenie na naszej witrynie szkodliwej zawartości. Ataki często mylone z sobą, ale pozwalające na nieco inne wykorzystanie luk.
Numer sześć: Session Fixation. Nie masz uprawnień? Możesz je sobie ukraść. I to w dość prosty sposób, korzystając z luk w portalu i łatwowierności ludzi. Jeden z ataków, przed którym można się obronić niewielkim nakładem pracy, ale jego pominięcie podczas ustalania polityki bezpieczeństwa portalu może skończyć się tragicznie.
Wreszcie numer siedem: HTTP Response splitting. Atak o znaczeniu historycznym. Jego wykonanie uniemożliwia w tej chwili sam język. W starych wersjach potrafił napsuć sporo krwii.
Tyle tytułem wstępu. O każdym z ataków i sposobach obrony postaram się napisać więcej. Mam przygotowane już pewne przykłady ataków, muszę tylko przygotować poligon. Jeśli ktoś jest niecierpliwy, to może na temat ataków poczytać m.in. w czasopiśmie Hackin9. Dwa numery w wersji pdf są do pobrania z naszej strony.
Tagi: Bezpieczeństwo, Cross-Site Request Forgery, Cross-Site Scripting, CSRF, HTTP Response Splitting, PHP, security, Session Fixation, Session hijacking, Shell Injection, SQL Injection, XSS