Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
Dziurawa Sympatia - Sposoby obrony
Znaleziona luka skłania Was zapewne do refleksji.. no dobra był błąd, ale jak takich błędów unikać? Zapraszam do pierwszych wskazówek.
Podstawową zasadą, która sprawdza się w 98% to dokładne filtrowanie danych wejściowych.
Warto zaznaczyć, że serwis Symapatii filtrował dane i uniemożliwiał wpisanie zakazanych znaczników HTML (no oprócz <a>, który wg opisu nie był dozwolony, a można było go wykorzystać - patrz niżej). Nie były natomiast filtrowane atrybuty wpisywanych znaczników, w szczególności zdarzeń JavaScript co też zostało przeze mnie skrupulatnie wykorzystane.
Samo filtrowanie niestety nie zawsze wystarczy. Jeżeli osobie postronnej uda się wyłuskać identyfikator sesji w inny sposób to również będzie miał dostęp do konta. Opis tego przypadku jest zreszta przedstawiony w regulaminie Sympatii.. co mnie troche zaskoczyło.
Jest jednak proste rozwiązanie, które znacznie utrudni atakującemu skorzystanie z posiadanego identyfikatora sesji. Rozwiązanie polega na pamiętaniu w sesji dodatkowej wartości tak zwanego hashu. Hash jest budowany z wybranych danych, które identyfikują zalogowanego użytkownika i są stałe pomiędzy kolejnymi żądaniami strony. Wśród nich można wymieinć: IP, identyfikator przeglądarki, login. Przy każdym żadaniu strony zostaje obliczany hash na podstawie tych samych danych i sprawdzony z tym zapamiętanym w sesji. Jeżeli obie wartości są takie same zakładamy, iż jest to zautoryzowana osoba. W przeciwnym przypadku wykrywamy próbę ataku i prosimy o ponowne zalogowanie.
Podkreślam, iż to rozwiązanie nie jest na 100% skuteczne. Atakujący wiedząc jak jest budowany hash teoretycznie może tak spreparować odpowiednie wartości, aby uzyskać ten sam hash co “ofiara”. Jest to jednak bardzo trudne.
Informacja na stronie symaptia.onet.pl (stan na 20 luty 2007):
![]()
Napisz komentarz