2010-04-23 8 views
10

¿Cómo podría eliminar las etiquetas de script y todo lo que contiene PHP?Strip <script> etiquetas y todo lo demás con PHP?

+3

espero que no está tratando de desinfectar la entrada del usuario con listas negras. Te perderás 'onclick',' onmouseover', 'href =" javascript: ',' ​​src = "javascript:' y muchos otros. – Quentin

+0

realmente deberías asistir a los consejos de David, pero para responder a tu pregunta, por favor mira mi publicación. – oezi

+0

Por favor pregunte claramente a su necesidad – Karthik

Respuesta

11

Como dice David, filtrar solo las etiquetas de secuencia de comandos no es suficiente si lo que se busca es sanitizar los datos entrantes. HTML Purifier promesas para hacer el paquete completo:

Purificador HTML es una librería de filtros HTML compatible con los estándares escrito en PHP . Purificador HTML no sólo eliminará toda código malicioso (más conocida como XSS) con un fondo auditado, lista blanca todavía permisiva seguro, sino que también hará que sus documentos son compatible con las normas, algo que sólo puede conseguirse con un conocimiento exhaustivo de W3C de presupuesto.

8

Vaya con HTML Purifier como sugirió Pekka.

Nunca ir con expresiones regulares para ese caso

Aquí está un ejemplo, expresiones regulares filtros roto, funciona en navegadores (probado en Firefox)

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

se puede hacer eso con la función 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

¡NO, no puede usar esa función! Esa función en ", según tengo entendido. –

1

Yo uso este:

$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

Creo que esos nombres de variables deberían ser más largos. – xorinzor

Cuestiones relacionadas