Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] kasowanie javascript ze stringa
marcinek37
post 4.10.2012, 22:54:49
Post #1





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

Ostrzeżenie: (0%)
-----


  1. function strip_script($string) {
  2. $string = preg_replace("/<script[^>]*>.*?< *script[^>]*>/i", "", $string);
  3. $string = preg_replace("/<script[^>]*>/i", "", $string);
  4. return $string;
  5. }


czy taka funkcja wystarczy, aby każdy skrypt usunąć ze stringa?
Go to the top of the page
+Quote Post
sowiq
post 5.10.2012, 08:04:30
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jeżeli potrzebujesz jakiegoś "czyściciela" XSS, to polecam ten kombajn: http://htmlpurifier.org/
Go to the top of the page
+Quote Post
marcinek37
post 5.10.2012, 09:57:05
Post #3





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

Ostrzeżenie: (0%)
-----


wystarczy mi usunięcie <script>
czy ww. kod wystarczy?
Go to the top of the page
+Quote Post
sowiq
post 5.10.2012, 10:11:41
Post #4





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie wystarczy.
Kod
<<script>script>alert('1')</script>


Masz złe podejście. Zamiast robienia blacklisty i usuwania rzeczy w niej zawartej powinieneś zrobić whitelistę i usuwać wszystko, czego na niej nie ma. "Atakujący" zawsze może wymyślić coś, o czym Ty nie pomyślałeś. Chociażby
Kod
<img src="java script:alert(1)" />
Ten kod nie zadziała na teraźniejszych przeglądarkach, ale na starszych najprawdopodobniej tak.

Jeszcze raz polecam http://htmlpurifier.org/ bo to na prawdę dobre i sprawdzone rozwiązanie.

[edit]
Forum automatycznie rozdziela spacją javascript w tagu img powyżej

Ten post edytował sowiq 5.10.2012, 10:14:54
Go to the top of the page
+Quote Post
marcinek37
post 5.10.2012, 10:33:50
Post #5





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

Ostrzeżenie: (0%)
-----


właśnie to za dużo, co polecasz
chcę jedynie, aby do edytora tekstu (fckeditor) nie można było dawać skryptów - nic więcej
Go to the top of the page
+Quote Post
sowiq
post 5.10.2012, 10:51:33
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jeśli to ma być edytor dla użytkowników strony, to nie wystarczy Ci tylko filtrowanie JS. Poza tym musisz usuwać np. CSS. Jeszcze nie tak dawno Allegro zaliczyło niezłą wpadkę przez nieszczelne usuwanie CSS. Ktoś zrobił aukcję z elementami HTML pozycjonowanymi absolutnie. Dzięki temu był w stanie podmienić (tak na prawdę to zasłonić) elementy aukcji z ceną, przyciskiem 'Kup Teraz' itp.

Więc zastanów się dobrze czy chcesz dać użytkownikom możliwość wysyłania HTML i okrojenia go tylko z JS, czy nie zastąpić tego np. BBCode.
Go to the top of the page
+Quote Post
marcinek37
post 5.10.2012, 11:32:24
Post #7





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

Ostrzeżenie: (0%)
-----


wszystko jest pod kontrolą, prócz JS - nie chcę Was zanudzać tłumaczeniami, chcę jedynie skasować wszelkie skrypty JS, nic poza tym
Go to the top of the page
+Quote Post
sowiq
post 5.10.2012, 11:37:38
Post #8





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jeśli chcesz się skupić jedynie na tagach <script>, to teoretycznie wystarczy, że podaną przez Ciebie funkcję wykonasz w pętli
Kod
while(stripos($string, '<script') !== false){
    $string = strip_script($string);
}


Ale weź też pod uwagę takie rzeczy jak:
  1. <a onclick="alert(1)">
  2. <img onmouseover="alert(1)" />
  3. <meta http-equiv="refresh" content="10;url=http://google.com" /> <!-- to zadziała z każdego miejsca na stronie -->
  4. <img src="java script:alert(1)" />
  5. itd...
Go to the top of the page
+Quote Post
darko
post 5.10.2012, 11:52:15
Post #9





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


W pliku konfiguracyjnym fckconfig.js ustaw
FCKConfig.ProtectedSource.Add( /<script[\s\S]*?\/script>/gi ) ;
znalezione na


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
sowiq
post 5.10.2012, 12:02:04
Post #10





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@darko, filtrowanie client-side nie daje praktycznie żadnego zabezpieczenia. Równie dobrze możesz wysłać niebezpieczny kod z pominięciem edytora, albo chociażby wyłączyć JS w przeglądarce.
Go to the top of the page
+Quote Post
marcinek37
post 5.10.2012, 12:04:34
Post #11





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

Ostrzeżenie: (0%)
-----


dlatego szukam funkcji typowo php - czy ta zasugrowana przeze mnie wystarczy, czy lepiej szukać czegoś bardziej rozwiniętego?
Go to the top of the page
+Quote Post
Crozin
post 5.10.2012, 12:10:56
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


W pierwszym poście dostałeś na tacy podane gotowe narzędzie, które wystarczy tylko skonfigurować do swoich potrzeb. Czego więcej oczekujesz?
Go to the top of the page
+Quote Post
sowiq
post 5.10.2012, 12:20:34
Post #13





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(marcinek37 @ 5.10.2012, 13:04:34 ) *
dlatego szukam funkcji typowo php - czy ta zasugrowana przeze mnie wystarczy, czy lepiej szukać czegoś bardziej rozwiniętego?

Ręce opadają... Podałem Ci idealny przykład, że nie wystarczy.
Kod
<<script>script>alert('1')</script>

Podałem Ci powyżej przykład jak "zabezpieczyć" Twój kod przed takimi stringami, podałem Ci też przykład, że takie filtrowanie na wiele się nie zda. W końcu, jak zauważył Crozin, podałem Ci linka do biblioteki, która jest dobrze przetestowana i zabezpieczy Cię przed typami ataków, o których pewnie nawet nie masz pojęcia.

Jak sobie zabezpieczysz, tak bezpiecznie będziesz miał. Bardziej okrągłego koła na nowo nie wymyślisz. Dla mnie eot.

Ten post edytował sowiq 5.10.2012, 12:21:06
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:31