Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> TinyMCE, a bezpieczeństwo skryptu
404
post
Post #1





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

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


Witam.

Pomóżcie, bo już zaczynam świrować.

Dodajemy post do bloga. Tytuł wiadomości filtruję tak:
  1. if(!isset($_POST['message_title']) || !validate(post('message_title'), '/^[a-zA-Z0-9\-\!]{1,64}$/'))
  2. $error_messages->append('...');

Z tym nie ma większego problemu.

Do edycji samej wiadomości używam TinyMCE. Z tego co zdążyłem się zorientować to jeżeli w jej treści znajdzie się niestandardowy znak (np. < lub &) to TinyMCE zamienia go na jego "entity name". Sen mi z powiek spędza to, że do bazy lecą apostrofy. Używam oczywiście prepared statements, nie sklejam zapytań, ale jak widzę w bazie:
Kod
<p>test016-desc</p>
<p>;</p>
<p>"</p>
<p>'</p>
<p>&gt;</p>
<p>&lt;</p>
<p>?</p>
<p>&lt;script type="text/javascript"&gt;alert(1);&lt;/script&gt;</p>
...to niezbyt mi się to podoba.
Czy addslashes załatwi tutaj sprawę?

Zastanawiam się co zrobić kiedy ktoś wyłączy obsługę JS.

Proszę o jakieś wskazówki.
Go to the top of the page
+Quote Post
!*!
post
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


A co Ci się w tym nie podoba konkretniej? Jak używasz bindowania PDO to nie martwiłbym się co leci do bazy i czy jest to czymś przefiltrowane czy nie (w sensie encji itp.) Jak ktoś wyłączy obsługę JS, to powinno pokazać się pole textarea.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
404
post
Post #3





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

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


Cytat(!*! @ 25.05.2012, 12:05:03 ) *
Jak ktoś wyłączy obsługę JS, to powinno pokazać się pole textarea.

Ok, ale jeżeli używam TinyMCE to dane do bazy nie mogę być zformatowane np. za pomocą htmlentities. Ewentualnie addslashes. W związku z tym, w momencie kiedy ktoś wyłączy TinyMCE to nie będzie żadnego zabezpiecznia przed np. XSS, a zabezpieczenia tego nie jest wcale takie banalne jak mogłoby się wydawać. Oczywiście jest to do zrobienia, ale wymaga sporej ilości kodu (z tego co udało mi się dowiedzieć).
Go to the top of the page
+Quote Post
!*!
post
Post #4





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat
Ok, ale jeżeli używam TinyMCE to dane do bazy nie mogę być zformatowane np. za pomocą htmlentities.


Nie rozumiem Cie. Dlaczego nie mogą? TinyMCE to tylko nakładka na textarea, bo to z niego wysyłasz dane do PHP i tam je sobie obrabiasz jak chcesz, co ma w ogóle do tego brak obsługi JS? Wywal wszytko prócz html używając strip_tags() i po problemie.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
404
post
Post #5





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

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


Problem w tym, że to nie wystarczy tongue.gif Dla przykładu:
Kod
<span style="background-image: url('java script:alert(1)')">tekst</span>

TinyMCE sobie z tym poradzi, bo usunie atrybut style (jeżeli wprowadzimy go np. poprzez okienko HTML) - sprawdzałem. strip_tags to zostawi i XSS gotowy smile.gif Dlatego mówię, że takie proste filtrowanie tutaj nie wystarczy.

Ten post edytował 404 25.05.2012, 17:00:16
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


http://htmlpurifier.org/ jest twoim rozwiązaniem.


--------------------
Go to the top of the page
+Quote Post
!*!
post
Post #7





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat(404 @ 25.05.2012, 17:59:41 ) *
Kod
<span style="background-image: url('java script:alert(1)')">tekst</span>

TinyMCE sobie z tym poradzi, bo usunie atrybut style (jeżeli wprowadzimy go np. poprzez okienko HTML) - sprawdzałem. strip_tags to zostawi i XSS gotowy smile.gif Dlatego mówię, że takie proste filtrowanie tutaj nie wystarczy.


Nie wiem jak Ty chcesz robić XSS przez url w style od bg, ale niech będzie wink.gif przejrzałeś dokładnie stronę z tym znacznikiem? Jest tam kilka funkcji które dokładnie usuwają to o czym piszesz.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


!*!: http://ajaxian.com/archives/xsstc-cross-si...hrough-css-data


--------------------
Go to the top of the page
+Quote Post
404
post
Post #9





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

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


Dziękuję wszystkim za odpowiedzi smile.gif
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 Aktualny czas: 21.08.2025 - 14:37