2010-04-23 9 views
10

Co zrobić, aby usunąć tagi skryptów i wszystko wewnątrz nich za pomocą PHP?Strip <script> znaczniki i wszystko pomiędzy PHP?

+3

Mam nadzieję, że nie próbujesz odkażać danych wprowadzanych przez użytkownika za pomocą czarnych list. Będziesz tęsknił za 'onclick',' onmouseover', 'href =" javascript: ',' ​​src = "javascript:' i wieloma innymi. – Quentin

+0

powinieneś naprawdę uczestniczyć w podpowiedziach Davida, ale żeby odpowiedzieć na twoje pytanie, zobacz mój post. – oezi

+0

Proszę zapytaj o swoją potrzebę wyraźnie – Karthik

Odpowiedz

11

Jak mówi David, filtrowanie tylko znaczników skryptów nie wystarcza, jeśli chcesz odkażać przychodzące dane. HTML Purifier obiecuje zrobić pełny pakiet:

HTML Oczyszczacz jest zgodnych ze standardami HTML filtr biblioteka napisana w PHP. HTML Oczyszczania będzie nie tylko usunąć złośliwą kod (lepiej znany jako XSS) z dokładnie zbadanym, bezpiecznym jeszcze pozwalającej białej listy, będzie również upewnić się, że dokumenty są zgodne z normami , coś osiągnąć tylko z wszechstronnej wiedzy W3C specyfikacje.

8

Idź z HTML Purifier, jak zasugerował Pekka.

Nigdy nie idź z regex w tym przypadku

Oto przykład, regexes filtry uszkodzony, działa w przeglądarkach (testowane na Firefox)

<script script=">>><script></script><script>//" > 
/**/ 
alert(1); 
</script 
> 
-2

można to zrobić z funkcji strip_tags

http://www.php.net/strip_tags

<?php 
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>'; 
echo strip_tags($text); 

// Allow <p> and <a> 
echo strip_tags($text, '<p><a>'); 
?> 
+7

NIE, nie może korzystać z tej funkcji! Ta funkcja w ", zostało usunięte, jak rozumiem. –

1

Używam tego:

$tag_para_remover_codigo_fonte_url_dentro_buscador = array("head","script","style","object","embed","applet","noscript","noframes","noembed"); 

for ($i=0;$i<count($tag_para_remover_codigo_fonte_url_dentro_buscador);$i++) { 

    $codigo_fonte_url_dentro_buscador = preg_replace("/< *" . $tag_para_remover_codigo_fonte_url_dentro_buscador[$i] . "[^>]*>(.*?)<\/" . $tag_para_remover_codigo_fonte_url_dentro_buscador[$i] . " *>/i"," ",$codigo_fonte_url_dentro_buscador); 

} 

$codigo_fonte_url_dentro_buscador = html_entity_decode(strip_tags($codigo_fonte_url_dentro_buscador)); 
+2

Myślę, że te nazwy zmiennych powinny być dłuższe. – xorinzor

Powiązane problemy