Uso de la función filter_xss() para proteger de los ataques de Cross-Site Scripting en PHP

RECU-0671 (Recurso Ejemplo)

Descripción

Cross-site scripting (XSS) es una forma común de ataque que permite insertar código sobre la web, lo que puede ser usado para provocar errores y mal funcionamiento de la misma.

La función filter_xss() protege al código contra esta vulnerabilidad de la siguiente manera:

  • Comprueba que el texto filtrado esta en formato UTF-8
  • Elimina caracteres como NULL
  • Se asegura que las etiquetas HTML y sus etiquetas atributos están bien formadas.
  • Se asegura las entidades HTML como & están bien formadas
  • Asegura que no existen etiquetas HTML que contengan protocolos no permitidos.

Un ejemplo de uso sería el siguiente:

**
* Process variables for aggregator-item.tpl.php.
*
* @see aggregator-item.tpl.php
*/
function template_preprocess_aggregator_item(&$variables) {
  $item = $variables['item'];

  $variables['feed_url'] = check_url($item->link);
  $variables['feed_title'] = check_plain($item->title);
  $variables['content'] = aggregator_filter_xss($item->description);
  ...
}

Existe una llamada a aggregator_filter_xss(), que es un wrapper sobre filter_xss() y ofrece un array con las etiquetas HTML aceptables .Una versión simple de este wrapper sería:

/**
* Safely render HTML content, as allowed.
*/
function aggregator_filter_xss($value) {
  $tags = variable_get("aggregator_allowed_html_tags",
   '<a> <b> <br> <dd> <dl> <dt> <em> <i> <li> <ol> <p> <strong> <u> <ul>');
   // Turn tag list into an array so we can pass it as a parameter.
  $allowed_tags = preg_split('/\s+|<|>/', $tags, -1, PREG_SPLIT_NO_EMPTY));
 return filter_xss($value, $allowed_tags);
}

Contenidos relacionados