2008-10-27 16 views
6

Mam na mojej stronie edytor tekstu formatowanego, który staram się chronić przed atakami XSS. Myślę, że mam pod ręką wszystko, ale nadal nie jestem pewien, co robić z obrazami. Teraz używam następujące regex do sprawdzania poprawności adresów URL obrazu, który Jestem zakładając blokuje inline JavaScript ataki XSS:Skrypty Cross-site z obrazu

"https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+" 

Co nie jestem pewny jest jak otwarte pozostawia mnie na ataki XSS od zdalny obraz. Czy połączenie z obrazem zewnętrznym stanowi poważne zagrożenie dla bezpieczeństwa? Jedyną rzeczą, o jakiej mogę pomyśleć, jest to, że wprowadzony adres URL odwołuje się do zasobu, który zwraca "text/javascript" jako typ MIME zamiast jakiegoś obrazu, a następnie javascript jest wykonywany.

Czy to możliwe? Czy jest jakieś inne zagrożenie bezpieczeństwa, które powinienem wziąć pod uwagę?

+2

polecam również ha.ckers.org ściągawki: ha.ckers.org/xss.html –

Odpowiedz

4

Inną rzeczą, o którą trzeba się martwić, jest to, że można łatwo osadzić kod PHP wewnątrz obrazu i przesłać go przez większość czasu. Jedyną rzeczą, którą musiałby wtedy zrobić atak, to znaleźć sposób na dołączenie obrazu. (Tylko kod PHP zostanie wykonany, reszta zostanie tylko powtórzona). Sprawdź, czy typ MIME nie pomoże ci w tym, ponieważ atakujący może łatwo przesłać obraz z poprawnymi pierwszymi bajtami, po którym następuje arbitralny kod PHP. (To samo dotyczy kodu HTML i JavaScript).

+0

ja nie pozwalając użytkownikom Przesyłać zdjęcia. Użytkownicy mogą linkować do zdjęć w innych witrynach z powodów takich, jak te, o których wspomniałeś. –

+0

Czy prosty filtr nazw plików nie zapobiegnie temu? – AaronSieb

+0

@AaronSieb, nie, ponieważ można na przykład osadzić kod PHP na palecie GIF i przesłać idealnie poprawny obraz GIF z poprawnym typem pliku i typem MIME. Problem polega na tym, że dopóki mogę manipulować witryną w celu włączenia ("my_uploaded_gif.gif") masz kłopoty. Ponadto, obserwuj rzecz% 00. –

1

W takim przypadku spójrz na kontekst wokół niego: czy użytkownicy podają tylko adres URL? W takim przypadku wystarczy po prostu sprawdzić semantykę adresów URL i typ MIME. Jeśli użytkownik również wprowadzi znaczniki, musisz upewnić się, że nie można nimi manipulować, aby zrobić coś innego niż wyświetlać obrazy.

2

Jeśli przeglądarka znajduje się w obszarze chronionym hasłem, a Twoja aplikacja zawiera adresy URL inicjujące działania na podstawie żądań GET, możesz wysłać żądanie w imieniu użytkownika.

Przykłady:

  • src = "http://yoursite.com/deleteuser.xxx?userid=1234"
  • src = "http://yoursite.com/user/delete/1234 "
  • src =" http://yoursite.com/dosomethingdangerous”
+0

Czy naprawdę byłbym na to podatny? Mój Regex zezwala tylko na http/https na początku adresu URL, więc JavaScript (lub jakiekolwiek jego kodowanie) nie powinno być możliwe do przejścia lub jestem w błędzie? –

+0

Ups, zapomniałeś o "https?: // '. Będę edytować moją odpowiedź. –

+0

Przez REST nigdy nie piszemy niczego z GET ... – inf3rno