Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: TinyMCE, a bezpieczeństwo skryptu
Forum PHP.pl > Forum > PHP
404
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.
!*!
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.
404
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ć).
!*!
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.
404
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.
viking
http://htmlpurifier.org/ jest twoim rozwiązaniem.
!*!
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.
404
Dziękuję wszystkim za odpowiedzi smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.