2011-06-30 12 views
10

Czy połączenie https zabezpiecza pliki cookie i zapobiega atakom XSS. Mam prostego bloga, który pozwala użytkownikom wprowadzić kod JavaScript jako dane wejściowe. Chcę zezwalać na wprowadzanie kodu JavaScript przez użytkownika, nadal zapobiegając atakom XSS i kradzieży plików cookie. Czy https pomaga zabezpieczyć pliki cookie. Znalazłem tylko kilka stron, które mówią o tym i wciąż są niejasne.Czy https bezpieczne pliki cookie zapobiegają atakom XSS?

+0

HTTPS sam w sobie nie zapobiega XSS. –

+0

Umożliwienie użytkownikom wprowadzania kodu JavaScript jest ** bardzo ** niebezpieczne. Bardzo trudno jest zapobiec złośliwemu użytkownikowi, który robi nieprzyjemne rzeczy innym użytkownikom. –

+0

@Cameron - czy jest niebezpieczny, czy nie, nie ma znaczenia. Biorąc pod uwagę, że przeglądarki obsługują pseudo-protokół * javascript *, a dodatki takie jak Greasemonkey i Firebug pozwalają użytkownikom uruchamiać skrypty na stronach, niemożliwe jest powstrzymanie użytkowników od uruchamiania skryptu, który chcą na stronach w przeglądarce lub dowolnym innym programie użytkownika. – RobG

Odpowiedz

7

HTTPS może zapobiec atakowi typu "man-in-the-middle", a nie XSS. Niestety plik cookie sesji nie jest zabezpieczony tym samym, można zażądać strony z HTTP, a następnie ten sam plik cookie zostanie wysłany bez ochrony.

Aby upewnić się, że plik cookie sesji są wysyłane tylko na połączenia HTTPS, można użyć session_set_cookie_params function() przed rozpoczęciem obrad:

session_set_cookie_params(0, '/', '', true, true); 
session_start(); 

Uwaga pierwsza true, oznacza to, że plik cookie zostanie wysłany tylko do stron HTTPS. Druga true informuje przeglądarkę, że JavaScript nie może uzyskać dostępu do pliku cookie sesji, to zależy od przeglądarki, jeśli jest to zrobione poprawnie.

Innym dobrym sposobem na zwiększenie bezpieczeństwa witryny jest używanie cookie sesji tylko do utrzymywania sesji i używanie drugiego pliku cookie do obsługi uwierzytelniania. Mogę podać przykład, jeśli jesteś zainteresowany.

+0

Tak, zdecydowanie, pokaż przykład. Zgodnie z twoją odpowiedzią, jeśli cookie sesji jest zmuszone przejść przez połączenie https, możemy powiedzieć, że jest bezpieczny przed atakami XSS. – Hussein

+0

@Hussein - cookie sesji nie jest częścią ataku XSS, dobre wyjaśnienie dotyczące XSS można znaleźć tutaj: http://shiflett.org/articles/crosssite-scripting. Opisany przeze mnie przykład opisuje, jak używać mieszanych stron HTTP i HTTPS, ale pokazuje również, jak zachować sesję i uwierzytelnianie oddzielnie http://www.martinstoeckli.ch/php/php.html#ssl_nomim_cookie. Plik cookie sesji zawsze będzie celem ataków. – martinstoeckli

+0

Dziękuję @martin, Bardzo przydatne informacje w twoim artykule. – Hussein

4

Protokół HTTP (HTTPS lub HTTP) nie pomaga w XSS lub naprawdę ma jakąkolwiek relację. Będziesz musiał dodać środki zapobiegawcze i zachować ostrożność podczas wysyłania javascript do klienta.

+0

@comm @ cwa @jake thanks. Załóżmy, że chcemy, aby użytkownik wprowadził kod reklamy Google na blogu. Kod Google to javascript. Nie możemy usunąć javascript, ponieważ jest potrzebny. Jeśli dopuszczamy javascript, wówczas jesteśmy otwarci na wiele obszarów ataku xss. Jakie jest rozwiązanie tego. Jestem pewien, że jest na to sposób. – Hussein

1

Po zezwoleniu innym na dynamiczne zapisywanie i wykonywanie dowolnych skryptów JavaScript w witrynie mają oni dostęp do wielu rzeczy, które chcielibyście, aby zostawili w spokoju. Co najmniej, mogą przejąć twój identyfikator sesji PHP (będą mieli dostęp do twoich ciasteczek, po wszystkim), a następnie użyć Ajax do przekazania go do jakiegoś zdalnego serwera. Kiedy już to zrobią, będą mogli robić różnego rodzaju bzdury dla użytkowników.

Jeśli masz niech dodać własną JavaScript, polecam, że specjalnie wyłączyć wszystkie funkcje Ajax (XMLHTTPRequest = function(){} zapobiega wszystkie Ajax dość łatwo w większości przeglądarek, ale może trzeba spojrzeć na to, co potrzebuje IE (I nie wiem, co zrobi ActiveXObject = function(){} ...)). Niestety, nie można zablokować dostępu do plików cookie, jeśli masz jakiekolwiek oczekiwania na ich używanie (np. Jeśli masz sesję), więc musisz znaleźć inne obejście.

1

Jeśli chcesz, aby użytkownicy mogli wprowadzać kod JavaScript , ale go nie przeanalizowali, uruchom go za pomocą htmlspecialchars. Jeśli chcesz, aby były w stanie wykonać kod, to nie, HTTPS nie pomoże, a będziesz musiał przeanalizować kod i usunąć z niego wszystko, co złe.

Powiązane problemy