Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wycinanie niepożądanych tagów
Forum PHP.pl > Forum > PHP
waldemi
Witam
Piszę mały CMS o tematyce przyrodniczej. W Panelu Admina umieściłem edytor TINY MCE aby użytkownicy mogli dodawać swoje artykuły. Jednak po lekturze ostatniego numeru Komputer Świat EXPERT i artykułu o obronie przed atakami XSS okazało się że mój CMS jest na to zupełnie nie odporny. Poszukałem więc w internecie funkcję wycinającą zdefiniowane przeze mnie tagi jak np. DIV czy SCRIPT.
Funkcja wygląda tak:
  1. <?php
  2. function strip_selected_tags($str, $tags = "", $stripContent = false)
  3. {
  4. preg_match_all("/<([^>]+)>/i",$tags,$allTags,PREG_PATTERN_ORDER);
  5. foreach ($allTags[1] as $tag){
  6. if ($stripContent) {
  7. $str = preg_replace("/<".$tag."[^>]*>.*</".$tag.">/iU","",$str);
  8. }
  9. $str = preg_replace("/</?".$tag."[^>]*>/iU","",$str);
  10. }
  11. return $str;
  12. }
  13. ?>

Jednak po wycięciu tagów nadal zostaje tekst który był wpisany między nimi. Czy ktoś umiałby przerobić tą funkcję tak, żeby wycinać też ten tekst?
skowron-line
  1. <?php
  2. $text = '<p>Test paragraph.</p><!-- Comment --> Other text';
  3. echo strip_tags($text);
  4. echo "n";
  5.  
  6. // Allow <p>
  7. echo strip_tags($text, '<p>');
  8. ?>
  9.  
  10. Powyższy przykład wyświetli:
  11.  
  12. Test paragraph. Other text
  13. <p>Test paragraph.</p> Other text

strip_tags
piczu
w komentarzu do funkcji jest
Cytat
strip_content flag: TRUE will also strip everything between open and closed tag

co oznacza ze przy stripContent = true, usuwa rowniez to co pomiedzy tagami.
waldemi
Cytat(piczu @ 9.04.2007, 11:38:35 ) *
w komentarzu do funkcji jest
Cytat

strip_content flag: TRUE will also strip everything between open and closed tag

co oznacza ze przy stripContent = true, usuwa rowniez to co pomiedzy tagami.

Dzięki, gdybym troche lepiej znał angielski to pewnie sam bym to znalazł. Jest jednak nadal mały problem:
jeśli do listy usuwanych tagów wpiszę <script> to tag jest usunięty ale tekst pomiędzy nimi pozostaje. Przy innych jest OK.
piczu
mozesz podac przyklad?
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.