2010-02-21 11 views
5

Nota: Me ocupo de la inyección de SQL y de la salida que se escapa en otro lugar: esta pregunta se trata solo del filtrado de entrada, gracias.Filtrado de entrada de usuario: ¿necesito filtrar HTML?

Estoy en medio de la refactorización de las funciones de filtrado de entrada de mi usuario. Antes de pasar el parámetro/POST GET a un filtro de tipo específico con filter_var() hago lo siguiente:

Ahora la pregunta: ¿tiene sentido pasar el parámetro a un filtro como htmLawed o HTML Purifier, o puedo pensar que la entrada es segura? Me parece que estos dos difieren principalmente en la granularidad de los elementos y atributos HTML permitidos (que no me interesan, ya que elimino todo), pero los documentos htmLawed tienen una sección sobre 'dangerous characters' que sugiere que podría haber un motivo para usarlo En este caso, ¿cuál sería una configuración sensata para ello?

+0

El carácter peligroso podría ser caracteres de control UTF-8. – Jacco

+0

¿Alguna sugerencia sobre cómo deshacerse de ellos? – djn

+1

Realmente no recibo su nota, la Inyección de SQL se trata de prevenir la entrada de usuarios desagradables en una consulta sql. De hecho, la mayoría de las vulnerabilidades se deben a INPUT desagradable, no a la salida. Estas se llaman vulnerabilidades de "Mancha y hundimiento". – rook

Respuesta

2

Hay muchos enfoques diferentes para XSS que son seguros. El único motivo para saber si su enfoque contiene agua es probar la explotación. Recomiendo usar un Free XSS vulnerability Scanner *, o el código abierto wapiti.

Para ser sincero, nunca usaré strip_tags() porque no siempre se necesitan etiquetas html para ejecutar javascript. Me gusta htmlspecialchars($var,ENT_QUOTES);.

Por ejemplo, este es vulnerable a XSS:

print('<A HREF="http://www.xssed.com/'.strip_tags($_REQUEST[xss]).'">link</a>'); 

que no es necesario <> para ejecutar código JavaScript en este caso, porque se puede utilizar onmouseover, aquí es un ataque ejemplo:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"'; 

El ENT_QUOTES se ocupará de las comillas dobles que corregirán esta vulnerabilidad XSS.

* Estoy afiliado a este sitio/servicio.

+0

Muy buen punto! ¡Gracias! Encontré una lista de eventos en http: // php.net/manual/es/function.strip-tags.php # 82180 y pasó la matriz a str_ireplace() - esto debería encargarse de ello. – djn

+1

Tenga en cuenta las directrices de [promoción] (http://stackoverflow.com/faq#promotion). –

0

Creo que lo que está haciendo es seguro, al menos desde mi punto de vista no hay código HTML debe conseguir a través de su filtro

+0

-1 Sí, pero javascript aún puede hacerlo a través de estos filtros. – rook