Pregunta

¿Cómo limito los tipos de HTML que un usuario puede ingresar en un cuadro de texto? Estoy ejecutando un foro pequeño con algún software personalizado que estoy probando en versión beta, pero necesito saber cómo limitar la entrada de HTML. ¿Alguna sugerencia?

¿Fue útil?

Solución

Sugeriría un enfoque ligeramente alternativo:

  • no filtre los datos entrantes del usuario (más allá de la prevención de la inyección sql). los datos del usuario deben mantenerse tan puros como sea posible.
  • filtre todos los datos salientes de la base de datos, aquí es donde sucederán cosas como la eliminación de etiquetas, etc.

mantener limpios los datos del usuario le permite una mayor flexibilidad en la forma en que se muestran. Filtrar todos los datos salientes es un buen hábito para entrar (junto con el meme de datos de nunca confiar).

Otros consejos

No mencionó con qué se creó el foro, pero si es PHP, consulte:

  

http://htmlpurifier.org/

     

Características de la biblioteca: Lista blanca, Eliminación, Bien formado, Anidamiento, Atributos, XSS seguro, Estándar seguro

Una vez que se envía el texto, puede quitar cualquier / todas las etiquetas que no coincidan con su conjunto predefinido utilizando una expresión regular en PHP.

Se parecería a lo siguiente:

find open tag (<)
if contents != allowed tag, remove tag (from <..>)
  1. Analiza la entrada proporcionada y elimina todas las etiquetas html que no coinciden exactamente con la lista que estás permitiendo. Esto puede ser una expresión regular compleja, o puede hacer una iteración con estado a través del carácter [] de la cadena de entrada que construye la cadena de entrada permitida y elimina los atributos no deseados en etiquetas como img.

  2. Use un sistema de código diferente (BBCode, Markdown)

  3. Encuentre un código en línea que ya lo haga, para usarlo como base para su implementación. Por ejemplo, Slashcode debe realizar esto, así que busque su implementación en Perl y use las expresiones regulares (que supongo que están allí)

Independientemente de lo que use, asegúrese de estar informado sobre qué tipo de contenido HTML puede ser peligroso.

p. a < script > la etiqueta es bastante obvia, pero un < estilo > la etiqueta es igual de mala en IE, porque puede invocar comandos JScript.

De hecho, cualquier estilo = " ... " El atributo puede invocar script en IE.

< objeto > sería una etiqueta más de la que estar cansado.

PHP viene con una función simple strip_tag para eliminar las etiquetas HTML. Permite que ciertas etiquetas no se eliminen.

Ejemplo # 1 ejemplo strip_tags ()

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

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

El ejemplo anterior se mostrará:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>

Personalmente para un foro, usaría BBCode o Markdown debido a la cantidad de soporte y características proporcionadas, como la vista previa en vivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top