2010-04-23 6 views
10

Wie würde ich über das Entfernen von Skript-Tags und alles, was in ihnen steckt, mit PHP gehen?Streifen <script> Tags und alles dazwischen mit PHP?

+3

Ich hoffe, Sie sind nicht versuchen, eine Benutzereingabe mit schwarzen Listen zu sanieren. Sie werden 'onclick',' onmouseover', 'href =" javascript: ',' ​​src = "javascript:' und viele andere vermissen. – Quentin

+0

Sie sollten wirklich Davids Hinweise besuchen, aber um Ihre Frage zu beantworten, finden Sie in meinem Beitrag. – oezi

+0

Bitte fragen Sie Ihren Bedarf klar – Karthik

Antwort

11

Wie David sagt, reicht das Filtern von Skript-Tags nicht aus, wenn eingehende Daten bereinigt werden sollen. HTML Purifier verspricht das volle Paket zu tun:

HTML Purifier ist eine standardkonforme HTML-Filter-Bibliothek in PHP geschrieben. HTML Purifier entfernen wird nicht nur all bösartigen Code (besser als XSS bekannt) mit einer gründlich geprüft, sicher noch permissiven weißen Liste, es wird auch Ihre Dokumente sind Standards kompatibel, was nur erreichbar mit einem umfassenden Wissen über W3C stellen Sie sicher, Spezifikationen.

8

Gehen Sie mit HTML Purifier wie vorgeschlagen Pekka.

Gehen Sie nie mit regex für diesen Fall

Hier ist ein Beispiel, Regexes Filter gebrochen, Arbeiten auf Browsern (getestet auf Firefox)

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

Sie können das tun mit der Funktion 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

NEIN, er kann diese Funktion nicht verwenden! Diese Funktion für " entfernt werden, wie ich es verstehe. –

1

Ich benutze diese:

$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

Ich denke, diese Variablennamen sollten länger sein. – xorinzor