You are on page 1of 16

Bezpieczeństwo stron

internetowych

Opracował:
Piotr Arciszewski
Spis treści

1. SQL Injection
2. Cross-site scripting (XSS)
3. Session Fixation
4. Session Hijacking
5. Co to jest Captcha?
SQL Injection

SQL Injection (dosłownie zastrzyk SQL) – luka w zabezpieczeniach


aplikacji internetowych polegająca na nieodpowiednim filtrowaniu lub
niedostatecznym typowaniu i późniejszym wykonaniu danych
przesyłanych w postaci zapytań SQL do bazy danych. Podatne są na
niego systemy złożone z warstwy programistycznej (przykładowo
skrypt w PHP, ASP, JSP itp.) dynamicznie generującej zapytania do
bazy danych (MySQL, PostgreSQL itp.). Wynika on zwykle z braku
doświadczenia lub wyobraźni programisty.
SQL Injection

Atak SQL Injection polega na przesłaniu do serwera odpowiednio spreparowanego kodu SQL,
który zostanie na nim wykonany. W wyniku tego atakujący może wykraść dane lub włamać się
na serwer.
1. SQL Injection - Niedostateczne filtrowanie danych

Ten typ ataków opiera się na nieodpowiednim filtrowaniu znaków ucieczki


z danych wejściowych, co pozwala na przekazanie dodatkowych
parametrów do zapytania.

Poniższy kod prezentuje ten problem (PHP):

$q = mysql_query("SELECT * FROM uzytkownicy WHERE uzytkownik = '$uzytkownik'");

Gdy użytkownik przekaże jako $uzytkownik wartość „kowalski”, całe


zapytanie przyjmie postać:

SELECT * FROM uzytkownicy WHERE uzytkownik = 'kowalski'

i będzie spełniało swoją funkcję. Jednak gdy złośliwy użytkownik


przekaże wartość „x' OR '1'='1”, to całe zapytanie będzie wyglądało:

SELECT * FROM uzytkownicy WHERE uzytkownik = 'x' OR '1'='1'

przez co pobierze z bazy danych wszystkie rekordy zamiast jednego


wybranego.
1. SQL Injection - Niedostateczne filtrowanie danych

Podstawowym sposobem zabezpieczania przed SQL injection jest


niedopuszczenie do nieuprawnionej zmiany wykonywanego zapytania.
W PHP można to zrobić, poprzez wykonanie na każdym tekstowym
parametrze wykorzystywanym do budowy zapytania wbudowanej funkcji
addslashes(), która dodaje backslash przed znakami, takimi jak ', " czy \,
dzięki czemu znaki te nie są traktowane jak znaki specjalne. Dostępne są
również funkcje specyficzne dla poszczególnych silników, takie jak np.
oferowana przez serwer MySQL mysql_real_escape_string().

$login = mysql_escape_string($login);

Wróć do menu
2. Cross-site scripting (XSS)

Cross-site scripting (XSS) – sposób ataku na serwis WWW polegający


na osadzeniu w treści atakowanej strony kodu (zazwyczaj JavaScript),
który wyświetlony innym użytkownikom może doprowadzić do wykonania
przez nich niepożądanych akcji. Skrypt umieszczony w zaatakowanej
stronie może obejść niektóre mechanizmy kontroli dostępu do danych
użytkownika.
2. Cross-site scripting (XSS)

Aby atak XSS był możliwy witryna musi prezentować treść przekazaną
od użytkownika jako kod HTML serwisu, bez uprzedniej konwersji
tekstu na HTML (poprzez zamianę specjalnych znaków HTML na encje).
Ochrona przed XSS poprzez samą weryfikację i filtrowanie
niebezpiecznych danych jest bardzo trudna.

Jeśli treść zawierająca spreparowany skrypt prezentowana jest


wyłącznie w odpowiedzi na to konkretne zapytanie, podatność
określana jest jako non-persistent XSS i z reguły może być
każdorazowo użyta tylko wobec pojedynczych ofiar. Jeśli serwis
zapamiętuje przesłaną treść i prezentuje ją kolejnym odwiedzającym
(np. na forum internetowym), atak określany jest jako persistent XSS i
jego jednorazowe wykorzystanie może posłużyć do naruszenia
bezpieczeństwa kont tysięcy użytkowników.
2. Cross-site scripting (XSS)

Ze względu na szeregową strukturę dokumentów HTML i trudność


oddzielenia kodu JavaScript od znaczników kontrolujących prezentację
treści, a także ze względu na wady przewidzianych przez JavaScript
mechanizmów zabezpieczeń, podatności tego typu są niezwykle
częstym problemem we współczesnych dynamicznych witrynach
WWW, zwłaszcza w tak zwanych stronach Web 2.0, a ich
wyeliminowanie wymaga dużej staranności.

';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";ale
rt(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//></
script>!--<script>alert(String.fromCharCode(88,83,83))</script>=&{}

Wykonanie powyższych instrukcji języka JavaScript spowoduje


wyświetlenie monitu z komunikatem o treści "XSS" (jeśli tylko
występuje podatność).
2. Cross-site scripting (XSS)

Wróć do menu
3. Session Fixation

Kolejny rodzaj ataku, określany terminem Session Fixation, różni się od


opisanych wyżej metod tym, że atakujący nie skupia swojej uwagi na
zdobyciu identyfikatora sesji ofiary, a raczej na skłonieniu ofiary do
użycia identyfikatora określonego przez niego samego, np. poprzez
odpowiednio spreparowany odnośnik z dołączonym identyfikatorem
sesji. Innymi słowy, użytkownik zostaje nieświadomie skłoniony do
użycia sesji zainicjowanej przez atakującego.
3. Session Fixation

Atak ten przebiega standardowo w trzech krokach :

1. Ustanowienie sesji - w pierwszym kroku atakujący tworzy losowy


identyfikator sesji lub rozpoczyna nową sesję na docelowym
serwerze i pozyskuje z niej identyfikator. Zazwyczaj musi on
utrzymywać sesję przez wielokrotne wysyłanie żądań, aby uniknąć
jej wygaśnięcia.

2. Wymuszenie sesji - atakujący przekazuje ofierze ustalony


identyfikator. Przekazanie to może się odbyć na wiele sposobów
m.in. może on wykorzystać techniki polegające na iniekcji i
wykonaniu wrogiego kodu, np. Cross Site Scripting. Może także
skłonić ofiarę do uruchomienia odpowiednio spreparowanego
odnośnika lub formularza HTML.

3. Uzyskanie dostępu - w ostatnim kroku atakującemu pozostaje tylko


czekać, aż ofiara zaloguje się do aplikacji używając ustalonego
identyfikatora, po czym wykorzystując ten sam identyfikator
atakujący może podszyć się pod ofiarę.

Wróć do menu
4. Session Hijacking

Session Hijacking (ang. to hijack – porywać, uprowadzać), czyli


przechwytywanie sesji, odnosi się do wszystkich ataków, gdzie
włamywacz próbuje uzyskać dostęp do istniejącej sesji użytkownika, tzn.
takich gdzie identyfikator został już wcześniej przydzielony. Polegają na
uzyskiwaniu nieuprawnionego dostępu do systemów komputerowych na
skutek przechwycenia sesji legalnego użytkownika. Opiera się na
przesyłaniu w sesji np. adresu IP komputera wraz z nazwą przeglądarki,
spod których została ona utworzona, a następnie porównywać je przy
kolejnych wizytach z danymi dostarczonymi przez serwer.
4. Session Hijacking

Przeciwdziałanie przechwyceniu identyfikatora sesji

Sposób przekazywania identyfikatora sesji

Identyfikator sesji możemy przekazywać zarówno w adresie URL, jak i w


ciasteczku. Pierwszy z wymienionych sposobów zdecydowanie nie jest
dobrym pomysłem, ponieważ:
• Każda osoba używająca tego samego komputera będzie mogła poznać
identyfikator sesji z historii stron przeglądarki.
• Adresy URL często zapisywane są przez serwery proxy, dzienniki
zdarzeń, itp. W wyniku ich analizy można przeczytać identyfikatory sesji.
• Bardzo łatwo zmodyfikować identyfikator sesji poprzez manipulacje
łańcuchem żądania.
• Kiedy użytkownik przechodzi na inną stronę, adres URL wraz z
identyfikatorem sesji dostępny jest w nagłówku HTTP Referer.
• Użytkownik, przekazując adres URL innym osobom, nieumyślnie
udostępnia także identyfikator sesji.
4. Session Hijacking

Naturalnym wyborem do przekazywania identyfikatora sesji są więc


ciasteczka. Wadą tego rozwiązania jest to, że odwiedzający stronę ma
pełne prawo i możliwości do odmówienia przyjęcia cookie. Niestety coś za
coś. Lepszym wyjściem jest jednakże wyjaśnienie użytkownikowi dlaczego
ciasteczka są potrzebne, niż opieranie obsługi sesji na rozwiązaniu, które
nie jest bezpieczne.

Aby wymusić używanie ciasteczek do przekazywania identyfikatora sesji


powinniśmy ustawić odpowiednie dyrektywy konfiguracyjne :
• session.use_cookies - ustawia przekazywanie identyfikatora w
ciasteczkach,
•session.use_only_cookies - ustawia pobieranie identyfkatora tylko z
ciasteczek,
• session.trans_sid - ustawia przekazywanie identyfikatora poprzez adres
URL i formularze WWW możliwość tą oczywiście należy wyłączyć.

Wróć do menu
5. Co to jest Captcha?

CAPTCHA – rodzaj techniki stosowanej jako zabezpieczenie na


stronach www, celem której jest dopuszczenie do przesłania danych
tylko wypełnionych przez człowieka.
Technika ta chroni m.in.:

• formularze – przed spamem


• portale - przed zakładaniem kont przez automaty
• fora dyskusyjne
• blogi - przed reklamami w komentarzach

Przykładowy captchacha

Wróć do menu

You might also like