Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/06/2009, 03:12
Gabito2009
 
Fecha de Ingreso: marzo-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Ayuda con preg_replace y expresiones regulares!

Hola a todos!

Hace unos meses pedí ayuda con un asunto similar, y como la respuesta fue rápida y satisfactoria, vuelvo con más dudas.

Me encuentro con la necesidad de eliminar una parte de una cadena de caracteres, por el uso de HTML en mi web, que es similar a un foro donde la gente puede postear mensajes con dicho formato.

Me vendría bien recomendaciones de cómo filtrar el código HTML para que no pueda ser explotado por atacantes... Lo que hacía antes era eliminar las etiquetas <SCRIPT></SCRIPT> y su contenido, pero eso no basta... Si alguien quiere subir una imagen con posición absoluta, podría ser tan grande que taparía toda la pantalla y sería imposible de eliminar por el administrador. Solo podría hacerlo yo desde la base de datos.

El código sería el siguiente:

Código:
<img src = "imagen.jpg" alt = "imagen gigante" style = "position: absolute; left: 0px; top: 0px;" border = "0" height = "2000" width = "2000" />
Entonces utilizo el siguiente algoritmo para eliminar la parte style dentro de la etiqueta img:

preg_replace('/(<img[^>]*)style*.=*.(\'|").*(\'|")/si', '\\1', $cadena);

Le di la posibilidad de comillas simples y comillas dobles (ya que creo que style no funciona sin encomillado). La "s" por si hay salto de línea, y la "i" para que sea case insensitive.

Me da el siguiente resultado:

Código:
<img src = "imagen.jpg" alt = "imagen gigante"  />
Mi problema es que no domino todavía muy bien las expresiones regulares... Eliminó todo lo que viene después de style, incluyendo border, height y width. Y eso no debería hacerlo.

¿Cuál es el código que debo implementar realmente?

Muchas gracias!